brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.6 KiB · 5874ce5 Raw
117 lines · plain
1; Test 64-bit comparisons in which the second operand is a PC-relative2; variable.3;4; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s5 6@g = dso_local global i64 17@h = dso_local global i64 1, align 4, section "foo"8 9; Check signed comparisons.10define dso_local i64 @f1(i64 %src1) {11; CHECK-LABEL: f1:12; CHECK: cgrl %r2, g13; CHECK-NEXT: blr %r1414; CHECK: br %r1415entry:16  %src2 = load i64, ptr@g17  %cond = icmp slt i64 %src1, %src218  br i1 %cond, label %exit, label %mulb19mulb:20  %mul = mul i64 %src1, %src121  br label %exit22exit:23  %res = phi i64 [ %src1, %entry ], [ %mul, %mulb ]24  ret i64 %res25}26 27; Check unsigned comparisons.28define dso_local i64 @f2(i64 %src1) {29; CHECK-LABEL: f2:30; CHECK: clgrl %r2, g31; CHECK-NEXT: blr %r1432; CHECK: br %r1433entry:34  %src2 = load i64, ptr@g35  %cond = icmp ult i64 %src1, %src236  br i1 %cond, label %exit, label %mulb37mulb:38  %mul = mul i64 %src1, %src139  br label %exit40exit:41  %res = phi i64 [ %src1, %entry ], [ %mul, %mulb ]42  ret i64 %res43}44 45; Check equality, which can use CRL or CLRL.46define dso_local i64 @f3(i64 %src1) {47; CHECK-LABEL: f3:48; CHECK: c{{l?}}grl %r2, g49; CHECK-NEXT: ber %r1450; CHECK: br %r1451entry:52  %src2 = load i64, ptr@g53  %cond = icmp eq i64 %src1, %src254  br i1 %cond, label %exit, label %mulb55mulb:56  %mul = mul i64 %src1, %src157  br label %exit58exit:59  %res = phi i64 [ %src1, %entry ], [ %mul, %mulb ]60  ret i64 %res61}62 63; ...likewise inequality.64define dso_local i64 @f4(i64 %src1) {65; CHECK-LABEL: f4:66; CHECK: c{{l?}}grl %r2, g67; CHECK-NEXT: blhr %r1468; CHECK: br %r1469entry:70  %src2 = load i64, ptr@g71  %cond = icmp ne i64 %src1, %src272  br i1 %cond, label %exit, label %mulb73mulb:74  %mul = mul i64 %src1, %src175  br label %exit76exit:77  %res = phi i64 [ %src1, %entry ], [ %mul, %mulb ]78  ret i64 %res79}80 81; Repeat f1 with an unaligned address.82define dso_local i64 @f5(i64 %src1) {83; CHECK-LABEL: f5:84; CHECK: larl [[REG:%r[0-5]]], h85; CHECK: cg %r2, 0([[REG]])86; CHECK-NEXT: blr %r1487; CHECK: br %r1488entry:89  %src2 = load i64, ptr@h, align 490  %cond = icmp slt i64 %src1, %src291  br i1 %cond, label %exit, label %mulb92mulb:93  %mul = mul i64 %src1, %src194  br label %exit95exit:96  %res = phi i64 [ %src1, %entry ], [ %mul, %mulb ]97  ret i64 %res98}99 100; Check the comparison can be reversed if that allows CGRL to be used.101define dso_local i64 @f6(i64 %src2) {102; CHECK-LABEL: f6:103; CHECK: cgrl %r2, g104; CHECK-NEXT: bhr %r14105; CHECK: br %r14106entry:107  %src1 = load i64, ptr@g108  %cond = icmp slt i64 %src1, %src2109  br i1 %cond, label %exit, label %mulb110mulb:111  %mul = mul i64 %src2, %src2112  br label %exit113exit:114  %res = phi i64 [ %src2, %entry ], [ %mul, %mulb ]115  ret i64 %res116}117