brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.2 KiB · 886106b Raw
238 lines · plain
1; Test 32-bit signed comparisons between memory and a constant.2;3; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s4 5; Check ordered comparisons with 0.6define double @f1(double %a, double %b, ptr %ptr) {7; CHECK-LABEL: f1:8; CHECK: chsi 0(%r2), 09; CHECK-NEXT: blr %r1410; CHECK: ldr %f0, %f211; CHECK: br %r1412  %val = load i32, ptr %ptr13  %cond = icmp slt i32 %val, 014  %res = select i1 %cond, double %a, double %b15  ret double %res16}17 18; Check ordered comparisons with 1.19define double @f2(double %a, double %b, ptr %ptr) {20; CHECK-LABEL: f2:21; CHECK: chsi 0(%r2), 022; CHECK-NEXT: bler %r1423; CHECK: ldr %f0, %f224; CHECK: br %r1425  %val = load i32, ptr %ptr26  %cond = icmp slt i32 %val, 127  %res = select i1 %cond, double %a, double %b28  ret double %res29}30 31; Check ordered comparisons with the high end of the signed 16-bit range.32define double @f3(double %a, double %b, ptr %ptr) {33; CHECK-LABEL: f3:34; CHECK: chsi 0(%r2), 3276735; CHECK-NEXT: blr %r1436; CHECK: ldr %f0, %f237; CHECK: br %r1438  %val = load i32, ptr %ptr39  %cond = icmp slt i32 %val, 3276740  %res = select i1 %cond, double %a, double %b41  ret double %res42}43 44; Check the next value up, which can't use CHSI.45define double @f4(double %a, double %b, ptr %ptr) {46; CHECK-LABEL: f4:47; CHECK-NOT: chsi48; CHECK: br %r1449  %val = load i32, ptr %ptr50  %cond = icmp slt i32 %val, 3276851  %res = select i1 %cond, double %a, double %b52  ret double %res53}54 55; Check ordered comparisons with -1.56define double @f5(double %a, double %b, ptr %ptr) {57; CHECK-LABEL: f5:58; CHECK: chsi 0(%r2), -159; CHECK-NEXT: blr %r1460; CHECK: ldr %f0, %f261; CHECK: br %r1462  %val = load i32, ptr %ptr63  %cond = icmp slt i32 %val, -164  %res = select i1 %cond, double %a, double %b65  ret double %res66}67 68; Check ordered comparisons with the low end of the 16-bit signed range.69define double @f6(double %a, double %b, ptr %ptr) {70; CHECK-LABEL: f6:71; CHECK: chsi 0(%r2), -3276872; CHECK-NEXT: blr %r1473; CHECK: ldr %f0, %f274; CHECK: br %r1475  %val = load i32, ptr %ptr76  %cond = icmp slt i32 %val, -3276877  %res = select i1 %cond, double %a, double %b78  ret double %res79}80 81; Check the next value down, which can't use CHSI.82define double @f7(double %a, double %b, ptr %ptr) {83; CHECK-LABEL: f7:84; CHECK-NOT: chsi85; CHECK: br %r1486  %val = load i32, ptr %ptr87  %cond = icmp slt i32 %val, -3276988  %res = select i1 %cond, double %a, double %b89  ret double %res90}91 92; Check equality comparisons with 0.93define double @f8(double %a, double %b, ptr %ptr) {94; CHECK-LABEL: f8:95; CHECK: chsi 0(%r2), 096; CHECK-NEXT: ber %r1497; CHECK: ldr %f0, %f298; CHECK: br %r1499  %val = load i32, ptr %ptr100  %cond = icmp eq i32 %val, 0101  %res = select i1 %cond, double %a, double %b102  ret double %res103}104 105; Check equality comparisons with 1.106define double @f9(double %a, double %b, ptr %ptr) {107; CHECK-LABEL: f9:108; CHECK: chsi 0(%r2), 1109; CHECK-NEXT: ber %r14110; CHECK: ldr %f0, %f2111; CHECK: br %r14112  %val = load i32, ptr %ptr113  %cond = icmp eq i32 %val, 1114  %res = select i1 %cond, double %a, double %b115  ret double %res116}117 118; Check equality comparisons with the high end of the signed 16-bit range.119define double @f10(double %a, double %b, ptr %ptr) {120; CHECK-LABEL: f10:121; CHECK: chsi 0(%r2), 32767122; CHECK-NEXT: ber %r14123; CHECK: ldr %f0, %f2124; CHECK: br %r14125  %val = load i32, ptr %ptr126  %cond = icmp eq i32 %val, 32767127  %res = select i1 %cond, double %a, double %b128  ret double %res129}130 131; Check the next value up, which can't use CHSI.132define double @f11(double %a, double %b, ptr %ptr) {133; CHECK-LABEL: f11:134; CHECK-NOT: chsi135; CHECK: br %r14136  %val = load i32, ptr %ptr137  %cond = icmp eq i32 %val, 32768138  %res = select i1 %cond, double %a, double %b139  ret double %res140}141 142; Check equality comparisons with -1.143define double @f12(double %a, double %b, ptr %ptr) {144; CHECK-LABEL: f12:145; CHECK: chsi 0(%r2), -1146; CHECK-NEXT: ber %r14147; CHECK: ldr %f0, %f2148; CHECK: br %r14149  %val = load i32, ptr %ptr150  %cond = icmp eq i32 %val, -1151  %res = select i1 %cond, double %a, double %b152  ret double %res153}154 155; Check equality comparisons with the low end of the 16-bit signed range.156define double @f13(double %a, double %b, ptr %ptr) {157; CHECK-LABEL: f13:158; CHECK: chsi 0(%r2), -32768159; CHECK-NEXT: ber %r14160; CHECK: ldr %f0, %f2161; CHECK: br %r14162  %val = load i32, ptr %ptr163  %cond = icmp eq i32 %val, -32768164  %res = select i1 %cond, double %a, double %b165  ret double %res166}167 168; Check the next value down, which should be treated as a positive value.169define double @f14(double %a, double %b, ptr %ptr) {170; CHECK-LABEL: f14:171; CHECK-NOT: chsi172; CHECK: br %r14173  %val = load i32, ptr %ptr174  %cond = icmp eq i32 %val, -32769175  %res = select i1 %cond, double %a, double %b176  ret double %res177}178 179; Check the high end of the CHSI range.180define double @f15(double %a, double %b, i32 %i1, ptr %base) {181; CHECK-LABEL: f15:182; CHECK: chsi 4092(%r3), 0183; CHECK-NEXT: blr %r14184; CHECK: ldr %f0, %f2185; CHECK: br %r14186  %ptr = getelementptr i32, ptr %base, i64 1023187  %val = load i32, ptr %ptr188  %cond = icmp slt i32 %val, 0189  %res = select i1 %cond, double %a, double %b190  ret double %res191}192 193; Check the next word up, which needs separate address logic,194define double @f16(double %a, double %b, ptr %base) {195; CHECK-LABEL: f16:196; CHECK: aghi %r2, 4096197; CHECK: chsi 0(%r2), 0198; CHECK-NEXT: blr %r14199; CHECK: ldr %f0, %f2200; CHECK: br %r14201  %ptr = getelementptr i32, ptr %base, i64 1024202  %val = load i32, ptr %ptr203  %cond = icmp slt i32 %val, 0204  %res = select i1 %cond, double %a, double %b205  ret double %res206}207 208; Check negative offsets, which also need separate address logic.209define double @f17(double %a, double %b, ptr %base) {210; CHECK-LABEL: f17:211; CHECK: aghi %r2, -4212; CHECK: chsi 0(%r2), 0213; CHECK-NEXT: blr %r14214; CHECK: ldr %f0, %f2215; CHECK: br %r14216  %ptr = getelementptr i32, ptr %base, i64 -1217  %val = load i32, ptr %ptr218  %cond = icmp slt i32 %val, 0219  %res = select i1 %cond, double %a, double %b220  ret double %res221}222 223; Check that CHSI does not allow indices.224define double @f18(double %a, double %b, i64 %base, i64 %index) {225; CHECK-LABEL: f18:226; CHECK: agr {{%r2, %r3|%r3, %r2}}227; CHECK: chsi 0({{%r[23]}}), 0228; CHECK-NEXT: blr %r14229; CHECK: ldr %f0, %f2230; CHECK: br %r14231  %add = add i64 %base, %index232  %ptr = inttoptr i64 %add to ptr233  %val = load i32, ptr %ptr234  %cond = icmp slt i32 %val, 0235  %res = select i1 %cond, double %a, double %b236  ret double %res237}238