brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.7 KiB · 693c294 Raw
122 lines · plain
1; Test 64-bit comparisons in which the second operand is sign-extended2; from a PC-relative i32.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 comparison.10define dso_local i64 @f1(i64 %src1) {11; CHECK-LABEL: f1:12; CHECK: cgfrl %r2, g13; CHECK-NEXT: blr %r1414; CHECK: br %r1415entry:16  %val = load i32, ptr@g17  %src2 = sext i32 %val to i6418  %cond = icmp slt i64 %src1, %src219  br i1 %cond, label %exit, label %mulb20mulb:21  %mul = mul i64 %src1, %src122  br label %exit23exit:24  %res = phi i64 [ %src1, %entry ], [ %mul, %mulb ]25  ret i64 %res26}27 28; Check unsigned comparison, which cannot use CHRL.29define dso_local i64 @f2(i64 %src1) {30; CHECK-LABEL: f2:31; CHECK-NOT: cgfrl32; CHECK: br %r1433entry:34  %val = load i32, ptr@g35  %src2 = sext i32 %val to i6436  %cond = icmp ult i64 %src1, %src237  br i1 %cond, label %exit, label %mulb38mulb:39  %mul = mul i64 %src1, %src140  br label %exit41exit:42  %res = phi i64 [ %src1, %entry ], [ %mul, %mulb ]43  ret i64 %res44}45 46; Check equality.47define dso_local i64 @f3(i64 %src1) {48; CHECK-LABEL: f3:49; CHECK: cgfrl %r2, g50; CHECK-NEXT: ber %r1451; CHECK: br %r1452entry:53  %val = load i32, ptr@g54  %src2 = sext i32 %val to i6455  %cond = icmp eq i64 %src1, %src256  br i1 %cond, label %exit, label %mulb57mulb:58  %mul = mul i64 %src1, %src159  br label %exit60exit:61  %res = phi i64 [ %src1, %entry ], [ %mul, %mulb ]62  ret i64 %res63}64 65; Check inequality.66define dso_local i64 @f4(i64 %src1) {67; CHECK-LABEL: f4:68; CHECK: cgfrl %r2, g69; CHECK-NEXT: blhr %r1470; CHECK: br %r1471entry:72  %val = load i32, ptr@g73  %src2 = sext i32 %val to i6474  %cond = icmp ne i64 %src1, %src275  br i1 %cond, label %exit, label %mulb76mulb:77  %mul = mul i64 %src1, %src178  br label %exit79exit:80  %res = phi i64 [ %src1, %entry ], [ %mul, %mulb ]81  ret i64 %res82}83 84; Repeat f1 with an unaligned address.85define dso_local i64 @f5(i64 %src1) {86; CHECK-LABEL: f5:87; CHECK: larl [[REG:%r[0-5]]], h88; CHECK: cgf %r2, 0([[REG]])89; CHECK-NEXT: blr %r1490; CHECK: br %r1491entry:92  %val = load i32, ptr@h, align 293  %src2 = sext i32 %val to i6494  %cond = icmp slt i64 %src1, %src295  br i1 %cond, label %exit, label %mulb96mulb:97  %mul = mul i64 %src1, %src198  br label %exit99exit:100  %res = phi i64 [ %src1, %entry ], [ %mul, %mulb ]101  ret i64 %res102}103 104; Check the comparison can be reversed if that allows CGFRL to be used.105define dso_local i64 @f6(i64 %src2) {106; CHECK-LABEL: f6:107; CHECK: cgfrl %r2, g108; CHECK-NEXT: bhr %r14109; CHECK: br %r14110entry:111  %val = load i32, ptr@g112  %src1 = sext i32 %val to i64113  %cond = icmp slt i64 %src1, %src2114  br i1 %cond, label %exit, label %mulb115mulb:116  %mul = mul i64 %src2, %src2117  br label %exit118exit:119  %res = phi i64 [ %src2, %entry ], [ %mul, %mulb ]120  ret i64 %res121}122