blob: f387293b2b1b9ae67845519f813b5585348158d6 [file] [log] [blame]
Ulrich Weigand9e3577f2013-05-06 16:17:29 +00001; Test 64-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 i64 1
7
8; Check signed comparisons.
9define i64 @f1(i64 %src1) {
10; CHECK: f1:
11; CHECK: cgrl %r2, g
12; CHECK-NEXT: j{{g?}}l
13; CHECK: br %r14
14entry:
15 %src2 = load i64 *@g
16 %cond = icmp slt i64 %src1, %src2
17 br i1 %cond, label %exit, label %mulb
18mulb:
19 %mul = mul i64 %src1, %src1
20 br label %exit
21exit:
22 %res = phi i64 [ %src1, %entry ], [ %mul, %mulb ]
23 ret i64 %res
24}
25
26; Check unsigned comparisons.
27define i64 @f2(i64 %src1) {
28; CHECK: f2:
29; CHECK: clgrl %r2, g
30; CHECK-NEXT: j{{g?}}l
31; CHECK: br %r14
32entry:
33 %src2 = load i64 *@g
34 %cond = icmp ult i64 %src1, %src2
35 br i1 %cond, label %exit, label %mulb
36mulb:
37 %mul = mul i64 %src1, %src1
38 br label %exit
39exit:
40 %res = phi i64 [ %src1, %entry ], [ %mul, %mulb ]
41 ret i64 %res
42}
43
44; Check equality, which can use CRL or CLRL.
45define i64 @f3(i64 %src1) {
46; CHECK: f3:
47; CHECK: c{{l?}}grl %r2, g
48; CHECK-NEXT: j{{g?}}e
49; CHECK: br %r14
50entry:
51 %src2 = load i64 *@g
52 %cond = icmp eq i64 %src1, %src2
53 br i1 %cond, label %exit, label %mulb
54mulb:
55 %mul = mul i64 %src1, %src1
56 br label %exit
57exit:
58 %res = phi i64 [ %src1, %entry ], [ %mul, %mulb ]
59 ret i64 %res
60}
61
62; ...likewise inequality.
63define i64 @f4(i64 %src1) {
64; CHECK: f4:
65; CHECK: c{{l?}}grl %r2, g
66; CHECK-NEXT: j{{g?}}lh
67; CHECK: br %r14
68entry:
69 %src2 = load i64 *@g
70 %cond = icmp ne i64 %src1, %src2
71 br i1 %cond, label %exit, label %mulb
72mulb:
73 %mul = mul i64 %src1, %src1
74 br label %exit
75exit:
76 %res = phi i64 [ %src1, %entry ], [ %mul, %mulb ]
77 ret i64 %res
78}