[SystemZ] Tighten branch tests
[oota-llvm.git] / test / CodeGen / SystemZ / int-cmp-38.ll
1 ; Test 32-bit comparisons in which the second operand is a PC-relative
2 ; variable.
3 ;
4 ; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
5
6 @g = global i32 1
7
8 ; Check signed comparisons.
9 define i32 @f1(i32 %src1) {
10 ; CHECK: f1:
11 ; CHECK: crl %r2, g
12 ; CHECK-NEXT: jl
13 ; CHECK: br %r14
14 entry:
15   %src2 = load i32 *@g
16   %cond = icmp slt i32 %src1, %src2
17   br i1 %cond, label %exit, label %mulb
18 mulb:
19   %mul = mul i32 %src1, %src1
20   br label %exit
21 exit:
22   %res = phi i32 [ %src1, %entry ], [ %mul, %mulb ]
23   ret i32 %res
24 }
25
26 ; Check unsigned comparisons.
27 define i32 @f2(i32 %src1) {
28 ; CHECK: f2:
29 ; CHECK: clrl %r2, g
30 ; CHECK-NEXT: jl
31 ; CHECK: br %r14
32 entry:
33   %src2 = load i32 *@g
34   %cond = icmp ult i32 %src1, %src2
35   br i1 %cond, label %exit, label %mulb
36 mulb:
37   %mul = mul i32 %src1, %src1
38   br label %exit
39 exit:
40   %res = phi i32 [ %src1, %entry ], [ %mul, %mulb ]
41   ret i32 %res
42 }
43
44 ; Check equality, which can use CRL or CLRL.
45 define i32 @f3(i32 %src1) {
46 ; CHECK: f3:
47 ; CHECK: c{{l?}}rl %r2, g
48 ; CHECK-NEXT: je
49 ; CHECK: br %r14
50 entry:
51   %src2 = load i32 *@g
52   %cond = icmp eq i32 %src1, %src2
53   br i1 %cond, label %exit, label %mulb
54 mulb:
55   %mul = mul i32 %src1, %src1
56   br label %exit
57 exit:
58   %res = phi i32 [ %src1, %entry ], [ %mul, %mulb ]
59   ret i32 %res
60 }
61
62 ; ...likewise inequality.
63 define i32 @f4(i32 %src1) {
64 ; CHECK: f4:
65 ; CHECK: c{{l?}}rl %r2, g
66 ; CHECK-NEXT: jlh
67 ; CHECK: br %r14
68 entry:
69   %src2 = load i32 *@g
70   %cond = icmp ne i32 %src1, %src2
71   br i1 %cond, label %exit, label %mulb
72 mulb:
73   %mul = mul i32 %src1, %src1
74   br label %exit
75 exit:
76   %res = phi i32 [ %src1, %entry ], [ %mul, %mulb ]
77   ret i32 %res
78 }