brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.3 KiB · 8ea0df3 Raw
238 lines · plain
1; Test 64-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: cghsi 0(%r2), 09; CHECK-NEXT: blr %r1410; CHECK: ldr %f0, %f211; CHECK: br %r1412  %val = load i64, ptr %ptr13  %cond = icmp slt i64 %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: cghsi 0(%r2), 022; CHECK-NEXT: bler %r1423; CHECK: ldr %f0, %f224; CHECK: br %r1425  %val = load i64, ptr %ptr26  %cond = icmp slt i64 %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: cghsi 0(%r2), 3276735; CHECK-NEXT: blr %r1436; CHECK: ldr %f0, %f237; CHECK: br %r1438  %val = load i64, ptr %ptr39  %cond = icmp slt i64 %val, 3276740  %res = select i1 %cond, double %a, double %b41  ret double %res42}43 44; Check the next value up, which can't use CGHSI.45define double @f4(double %a, double %b, ptr %ptr) {46; CHECK-LABEL: f4:47; CHECK-NOT: cghsi48; CHECK: br %r1449  %val = load i64, ptr %ptr50  %cond = icmp slt i64 %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: cghsi 0(%r2), -159; CHECK-NEXT: blr %r1460; CHECK: ldr %f0, %f261; CHECK: br %r1462  %val = load i64, ptr %ptr63  %cond = icmp slt i64 %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: cghsi 0(%r2), -3276872; CHECK-NEXT: blr %r1473; CHECK: ldr %f0, %f274; CHECK: br %r1475  %val = load i64, ptr %ptr76  %cond = icmp slt i64 %val, -3276877  %res = select i1 %cond, double %a, double %b78  ret double %res79}80 81; Check the next value down, which should be treated as a positive value.82define double @f7(double %a, double %b, ptr %ptr) {83; CHECK-LABEL: f7:84; CHECK-NOT: cghsi85; CHECK: br %r1486  %val = load i64, ptr %ptr87  %cond = icmp slt i64 %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: cghsi 0(%r2), 096; CHECK-NEXT: ber %r1497; CHECK: ldr %f0, %f298; CHECK: br %r1499  %val = load i64, ptr %ptr100  %cond = icmp eq i64 %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: cghsi 0(%r2), 1109; CHECK-NEXT: ber %r14110; CHECK: ldr %f0, %f2111; CHECK: br %r14112  %val = load i64, ptr %ptr113  %cond = icmp eq i64 %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: cghsi 0(%r2), 32767122; CHECK-NEXT: ber %r14123; CHECK: ldr %f0, %f2124; CHECK: br %r14125  %val = load i64, ptr %ptr126  %cond = icmp eq i64 %val, 32767127  %res = select i1 %cond, double %a, double %b128  ret double %res129}130 131; Check the next value up, which can't use CGHSI.132define double @f11(double %a, double %b, ptr %ptr) {133; CHECK-LABEL: f11:134; CHECK-NOT: cghsi135; CHECK: br %r14136  %val = load i64, ptr %ptr137  %cond = icmp eq i64 %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: cghsi 0(%r2), -1146; CHECK-NEXT: ber %r14147; CHECK: ldr %f0, %f2148; CHECK: br %r14149  %val = load i64, ptr %ptr150  %cond = icmp eq i64 %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: cghsi 0(%r2), -32768159; CHECK-NEXT: ber %r14160; CHECK: ldr %f0, %f2161; CHECK: br %r14162  %val = load i64, ptr %ptr163  %cond = icmp eq i64 %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: cghsi172; CHECK: br %r14173  %val = load i64, ptr %ptr174  %cond = icmp eq i64 %val, -32769175  %res = select i1 %cond, double %a, double %b176  ret double %res177}178 179; Check the high end of the CGHSI range.180define double @f15(double %a, double %b, i64 %i1, ptr %base) {181; CHECK-LABEL: f15:182; CHECK: cghsi 4088(%r3), 0183; CHECK-NEXT: blr %r14184; CHECK: ldr %f0, %f2185; CHECK: br %r14186  %ptr = getelementptr i64, ptr %base, i64 511187  %val = load i64, ptr %ptr188  %cond = icmp slt i64 %val, 0189  %res = select i1 %cond, double %a, double %b190  ret double %res191}192 193; Check the next doubleword 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: cghsi 0(%r2), 0198; CHECK-NEXT: blr %r14199; CHECK: ldr %f0, %f2200; CHECK: br %r14201  %ptr = getelementptr i64, ptr %base, i64 512202  %val = load i64, ptr %ptr203  %cond = icmp slt i64 %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, -8212; CHECK: cghsi 0(%r2), 0213; CHECK-NEXT: blr %r14214; CHECK: ldr %f0, %f2215; CHECK: br %r14216  %ptr = getelementptr i64, ptr %base, i64 -1217  %val = load i64, ptr %ptr218  %cond = icmp slt i64 %val, 0219  %res = select i1 %cond, double %a, double %b220  ret double %res221}222 223; Check that CGHSI 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: cghsi 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 i64, ptr %ptr234  %cond = icmp slt i64 %val, 0235  %res = select i1 %cond, double %a, double %b236  ret double %res237}238