brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.9 KiB · 176289a Raw
128 lines · plain
1; Test 32-bit comparisons in which the second operand is zero-extended2; from a PC-relative i16.3;4; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s5 6@g = dso_local global i16 17@h = dso_local global i16 1, align 1, section "foo"8 9; Check unsigned comparison.10define dso_local i32 @f1(i32 %src1) {11; CHECK-LABEL: f1:12; CHECK: clhrl %r2, g13; CHECK-NEXT: jl14; CHECK: br %r1415entry:16  %val = load i16, ptr@g17  %src2 = zext i16 %val to i3218  %cond = icmp ult i32 %src1, %src219  br i1 %cond, label %exit, label %mulb20mulb:21  %mul = mul i32 %src1, %src122  br label %exit23exit:24  %tmp = phi i32 [ %src1, %entry ], [ %mul, %mulb ]25  %res = add i32 %tmp, 126  ret i32 %res27}28 29; Check signed comparison.30define dso_local i32 @f2(i32 %src1) {31; CHECK-LABEL: f2:32; CHECK-NOT: clhrl33; CHECK: br %r1434entry:35  %val = load i16, ptr@g36  %src2 = zext i16 %val to i3237  %cond = icmp slt i32 %src1, %src238  br i1 %cond, label %exit, label %mulb39mulb:40  %mul = mul i32 %src1, %src141  br label %exit42exit:43  %tmp = phi i32 [ %src1, %entry ], [ %mul, %mulb ]44  %res = add i32 %tmp, 145  ret i32 %res46}47 48; Check equality.49define dso_local i32 @f3(i32 %src1) {50; CHECK-LABEL: f3:51; CHECK: clhrl %r2, g52; CHECK-NEXT: je53; CHECK: br %r1454entry:55  %val = load i16, ptr@g56  %src2 = zext i16 %val to i3257  %cond = icmp eq i32 %src1, %src258  br i1 %cond, label %exit, label %mulb59mulb:60  %mul = mul i32 %src1, %src161  br label %exit62exit:63  %tmp = phi i32 [ %src1, %entry ], [ %mul, %mulb ]64  %res = add i32 %tmp, 165  ret i32 %res66}67 68; Check inequality.69define dso_local i32 @f4(i32 %src1) {70; CHECK-LABEL: f4:71; CHECK: clhrl %r2, g72; CHECK-NEXT: jlh73; CHECK: br %r1474entry:75  %val = load i16, ptr@g76  %src2 = zext i16 %val to i3277  %cond = icmp ne i32 %src1, %src278  br i1 %cond, label %exit, label %mulb79mulb:80  %mul = mul i32 %src1, %src181  br label %exit82exit:83  %tmp = phi i32 [ %src1, %entry ], [ %mul, %mulb ]84  %res = add i32 %tmp, 185  ret i32 %res86}87 88; Repeat f1 with an unaligned address.89define dso_local i32 @f5(i32 %src1) {90; CHECK-LABEL: f5:91; CHECK: lgrl [[REG:%r[0-5]]], h@GOT92; CHECK: llh [[VAL:%r[0-5]]], 0([[REG]])93; CHECK: clrjl %r2, [[VAL]],94; CHECK: br %r1495entry:96  %val = load i16, ptr@h, align 197  %src2 = zext i16 %val to i3298  %cond = icmp ult i32 %src1, %src299  br i1 %cond, label %exit, label %mulb100mulb:101  %mul = mul i32 %src1, %src1102  br label %exit103exit:104  %tmp = phi i32 [ %src1, %entry ], [ %mul, %mulb ]105  %res = add i32 %tmp, 1106  ret i32 %res107}108 109; Check the comparison can be reversed if that allows CLHRL to be used.110define dso_local i32 @f6(i32 %src2) {111; CHECK-LABEL: f6:112; CHECK: clhrl %r2, g113; CHECK-NEXT: jh {{\.L.*}}114; CHECK: br %r14115entry:116  %val = load i16, ptr@g117  %src1 = zext i16 %val to i32118  %cond = icmp ult i32 %src1, %src2119  br i1 %cond, label %exit, label %mulb120mulb:121  %mul = mul i32 %src2, %src2122  br label %exit123exit:124  %tmp = phi i32 [ %src2, %entry ], [ %mul, %mulb ]125  %res = add i32 %tmp, 1126  ret i32 %res127}128