1; 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: jl 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: jl 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: je 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: jlh 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} 79