[SystemZ] Add truncating high-word stores (STCH and STHH)
[oota-llvm.git] / test / CodeGen / SystemZ / branch-02.ll
1 ; Test all condition-code masks that are relevant for signed integer
2 ; comparisons, in cases where a separate branch is better than COMPARE
3 ; AND BRANCH.
4 ;
5 ; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
6
7 define void @f1(i32 *%src, i32 %target) {
8 ; CHECK-LABEL: f1:
9 ; CHECK: .cfi_startproc
10 ; CHECK: .L[[LABEL:.*]]:
11 ; CHECK: c %r3, 0(%r2)
12 ; CHECK-NEXT: je .L[[LABEL]]
13   br label %loop
14 loop:
15   %val = load volatile i32 *%src
16   %cond = icmp eq i32 %target, %val
17   br i1 %cond, label %loop, label %exit
18 exit:
19   ret void
20 }
21
22 define void @f2(i32 *%src, i32 %target) {
23 ; CHECK-LABEL: f2:
24 ; CHECK: .cfi_startproc
25 ; CHECK: .L[[LABEL:.*]]:
26 ; CHECK: c %r3, 0(%r2)
27 ; CHECK-NEXT: jlh .L[[LABEL]]
28   br label %loop
29 loop:
30   %val = load volatile i32 *%src
31   %cond = icmp ne i32 %target, %val
32   br i1 %cond, label %loop, label %exit
33 exit:
34   ret void
35 }
36
37 define void @f3(i32 *%src, i32 %target) {
38 ; CHECK-LABEL: f3:
39 ; CHECK: .cfi_startproc
40 ; CHECK: .L[[LABEL:.*]]:
41 ; CHECK: c %r3, 0(%r2)
42 ; CHECK-NEXT: jle .L[[LABEL]]
43   br label %loop
44 loop:
45   %val = load volatile i32 *%src
46   %cond = icmp sle i32 %target, %val
47   br i1 %cond, label %loop, label %exit
48 exit:
49   ret void
50 }
51
52 define void @f4(i32 *%src, i32 %target) {
53 ; CHECK-LABEL: f4:
54 ; CHECK: .cfi_startproc
55 ; CHECK: .L[[LABEL:.*]]:
56 ; CHECK: c %r3, 0(%r2)
57 ; CHECK-NEXT: jl .L[[LABEL]]
58   br label %loop
59 loop:
60   %val = load volatile i32 *%src
61   %cond = icmp slt i32 %target, %val
62   br i1 %cond, label %loop, label %exit
63 exit:
64   ret void
65 }
66
67 define void @f5(i32 *%src, i32 %target) {
68 ; CHECK-LABEL: f5:
69 ; CHECK: .cfi_startproc
70 ; CHECK: .L[[LABEL:.*]]:
71 ; CHECK: c %r3, 0(%r2)
72 ; CHECK-NEXT: jh .L[[LABEL]]
73   br label %loop
74 loop:
75   %val = load volatile i32 *%src
76   %cond = icmp sgt i32 %target, %val
77   br i1 %cond, label %loop, label %exit
78 exit:
79   ret void
80 }
81
82 define void @f6(i32 *%src, i32 %target) {
83 ; CHECK-LABEL: f6:
84 ; CHECK: .cfi_startproc
85 ; CHECK: .L[[LABEL:.*]]:
86 ; CHECK: c %r3, 0(%r2)
87 ; CHECK-NEXT: jhe .L[[LABEL]]
88   br label %loop
89 loop:
90   %val = load volatile i32 *%src
91   %cond = icmp sge i32 %target, %val
92   br i1 %cond, label %loop, label %exit
93 exit:
94   ret void
95 }