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