Don't use a potentially expensive shift if all we want is one set bit.
[oota-llvm.git] / test / CodeGen / SystemZ / branch-07.ll
1 ; Test all condition-code masks that are relevant for CGRJ.
2 ;
3 ; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
4
5 declare i64 @foo()
6
7 define void @f1(i64 %target) {
8 ; CHECK: f1:
9 ; CHECK: .cfi_def_cfa_offset
10 ; CHECK: .L[[LABEL:.*]]:
11 ; CHECK: cgrje %r2, {{%r[0-9]+}}, .L[[LABEL]]
12   br label %loop
13 loop:
14   %val = call i64 @foo()
15   %cond = icmp eq i64 %val, %target
16   br i1 %cond, label %loop, label %exit
17 exit:
18   ret void
19 }
20
21 define void @f2(i64 %target) {
22 ; CHECK: f2:
23 ; CHECK: .cfi_def_cfa_offset
24 ; CHECK: .L[[LABEL:.*]]:
25 ; CHECK: cgrjlh %r2, {{%r[0-9]+}}, .L[[LABEL]]
26   br label %loop
27 loop:
28   %val = call i64 @foo()
29   %cond = icmp ne i64 %val, %target
30   br i1 %cond, label %loop, label %exit
31 exit:
32   ret void
33 }
34
35 define void @f3(i64 %target) {
36 ; CHECK: f3:
37 ; CHECK: .cfi_def_cfa_offset
38 ; CHECK: .L[[LABEL:.*]]:
39 ; CHECK: cgrjle %r2, {{%r[0-9]+}}, .L[[LABEL]]
40   br label %loop
41 loop:
42   %val = call i64 @foo()
43   %cond = icmp sle i64 %val, %target
44   br i1 %cond, label %loop, label %exit
45 exit:
46   ret void
47 }
48
49 define void @f4(i64 %target) {
50 ; CHECK: f4:
51 ; CHECK: .cfi_def_cfa_offset
52 ; CHECK: .L[[LABEL:.*]]:
53 ; CHECK: cgrjl %r2, {{%r[0-9]+}}, .L[[LABEL]]
54   br label %loop
55 loop:
56   %val = call i64 @foo()
57   %cond = icmp slt i64 %val, %target
58   br i1 %cond, label %loop, label %exit
59 exit:
60   ret void
61 }
62
63 define void @f5(i64 %target) {
64 ; CHECK: f5:
65 ; CHECK: .cfi_def_cfa_offset
66 ; CHECK: .L[[LABEL:.*]]:
67 ; CHECK: cgrjh %r2, {{%r[0-9]+}}, .L[[LABEL]]
68   br label %loop
69 loop:
70   %val = call i64 @foo()
71   %cond = icmp sgt i64 %val, %target
72   br i1 %cond, label %loop, label %exit
73 exit:
74   ret void
75 }
76
77 define void @f6(i64 %target) {
78 ; CHECK: f6:
79 ; CHECK: .cfi_def_cfa_offset
80 ; CHECK: .L[[LABEL:.*]]:
81 ; CHECK: cgrjhe %r2, {{%r[0-9]+}}, .L[[LABEL]]
82   br label %loop
83 loop:
84   %val = call i64 @foo()
85   %cond = icmp sge i64 %val, %target
86   br i1 %cond, label %loop, label %exit
87 exit:
88   ret void
89 }