brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.0 KiB · d95e5d8 Raw
136 lines · plain
1; Test 32-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 i32 17@h = dso_local global i32 1, align 2, section "foo"8 9; Check signed comparisons.10define dso_local i32 @f1(i32 %src1) {11; CHECK-LABEL: f1:12; CHECK: crl %r2, g13; CHECK-NEXT: blr %r1414; CHECK: br %r1415entry:16  %src2 = load i32, ptr@g17  %cond = icmp slt i32 %src1, %src218  br i1 %cond, label %exit, label %mulb19mulb:20  %mul = mul i32 %src1, %src121  br label %exit22exit:23  %res = phi i32 [ %src1, %entry ], [ %mul, %mulb ]24  ret i32 %res25}26 27; Check unsigned comparisons.28define dso_local i32 @f2(i32 %src1) {29; CHECK-LABEL: f2:30; CHECK: clrl %r2, g31; CHECK-NEXT: blr %r1432; CHECK: br %r1433entry:34  %src2 = load i32, ptr@g35  %cond = icmp ult i32 %src1, %src236  br i1 %cond, label %exit, label %mulb37mulb:38  %mul = mul i32 %src1, %src139  br label %exit40exit:41  %res = phi i32 [ %src1, %entry ], [ %mul, %mulb ]42  ret i32 %res43}44 45; Check equality, which can use CRL or CLRL.46define dso_local i32 @f3(i32 %src1) {47; CHECK-LABEL: f3:48; CHECK: c{{l?}}rl %r2, g49; CHECK-NEXT: ber %r1450; CHECK: br %r1451entry:52  %src2 = load i32, ptr@g53  %cond = icmp eq i32 %src1, %src254  br i1 %cond, label %exit, label %mulb55mulb:56  %mul = mul i32 %src1, %src157  br label %exit58exit:59  %res = phi i32 [ %src1, %entry ], [ %mul, %mulb ]60  ret i32 %res61}62 63; ...likewise inequality.64define dso_local i32 @f4(i32 %src1) {65; CHECK-LABEL: f4:66; CHECK: c{{l?}}rl %r2, g67; CHECK-NEXT: blhr %r1468; CHECK: br %r1469entry:70  %src2 = load i32, ptr@g71  %cond = icmp ne i32 %src1, %src272  br i1 %cond, label %exit, label %mulb73mulb:74  %mul = mul i32 %src1, %src175  br label %exit76exit:77  %res = phi i32 [ %src1, %entry ], [ %mul, %mulb ]78  ret i32 %res79}80 81; Repeat f1 with an unaligned address.82define dso_local i32 @f5(i32 %src1) {83; CHECK-LABEL: f5:84; CHECK: larl [[REG:%r[0-5]]], h85; CHECK: c %r2, 0([[REG]])86; CHECK-NEXT: blr %r1487; CHECK: br %r1488entry:89  %src2 = load i32, ptr@h, align 290  %cond = icmp slt i32 %src1, %src291  br i1 %cond, label %exit, label %mulb92mulb:93  %mul = mul i32 %src1, %src194  br label %exit95exit:96  %res = phi i32 [ %src1, %entry ], [ %mul, %mulb ]97  ret i32 %res98}99 100; Repeat f2 with an unaligned address.101define dso_local i32 @f6(i32 %src1) {102; CHECK-LABEL: f6:103; CHECK: larl [[REG:%r[0-5]]], h104; CHECK: cl %r2, 0([[REG]])105; CHECK-NEXT: blr %r14106; CHECK: br %r14107entry:108  %src2 = load i32, ptr@h, align 2109  %cond = icmp ult i32 %src1, %src2110  br i1 %cond, label %exit, label %mulb111mulb:112  %mul = mul i32 %src1, %src1113  br label %exit114exit:115  %res = phi i32 [ %src1, %entry ], [ %mul, %mulb ]116  ret i32 %res117}118 119; Check the comparison can be reversed if that allows CRL to be used.120define dso_local i32 @f7(i32 %src2) {121; CHECK-LABEL: f7:122; CHECK: crl %r2, g123; CHECK-NEXT: bhr %r14124; CHECK: br %r14125entry:126  %src1 = load i32, ptr@g127  %cond = icmp slt i32 %src1, %src2128  br i1 %cond, label %exit, label %mulb129mulb:130  %mul = mul i32 %src2, %src2131  br label %exit132exit:133  %res = phi i32 [ %src2, %entry ], [ %mul, %mulb ]134  ret i32 %res135}136