brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.8 KiB · 46983a4 Raw
140 lines · plain
1; Test 32-bit unsigned comparisons between memory and a constant.2;3; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s4 5; Check ordered comparisons with a constant near the low end of the unsigned6; 16-bit range.7define double @f1(double %a, double %b, ptr %ptr) {8; CHECK-LABEL: f1:9; CHECK: clfhsi 0(%r2), 110; CHECK-NEXT: bhr %r1411; CHECK: ldr %f0, %f212; CHECK: br %r1413  %val = load i32, ptr %ptr14  %cond = icmp ugt i32 %val, 115  %res = select i1 %cond, double %a, double %b16  ret double %res17}18 19; Check ordered comparisons with the high end of the unsigned 16-bit range.20define double @f2(double %a, double %b, ptr %ptr) {21; CHECK-LABEL: f2:22; CHECK: clfhsi 0(%r2), 6553523; CHECK-NEXT: blr %r1424; CHECK: ldr %f0, %f225; CHECK: br %r1426  %val = load i32, ptr %ptr27  %cond = icmp ult i32 %val, 6553528  %res = select i1 %cond, double %a, double %b29  ret double %res30}31 32; Check the next value up, which can't use CLFHSI.33define double @f3(double %a, double %b, ptr %ptr) {34; CHECK-LABEL: f3:35; CHECK-NOT: clfhsi36; CHECK: br %r1437  %val = load i32, ptr %ptr38  %cond = icmp ult i32 %val, 6553639  %res = select i1 %cond, double %a, double %b40  ret double %res41}42 43; Check equality comparisons with 32768, the lowest value for which44; we prefer CLFHSI to CHSI.45define double @f4(double %a, double %b, ptr %ptr) {46; CHECK-LABEL: f4:47; CHECK: clfhsi 0(%r2), 3276848; CHECK-NEXT: ber %r1449; CHECK: ldr %f0, %f250; CHECK: br %r1451  %val = load i32, ptr %ptr52  %cond = icmp eq i32 %val, 3276853  %res = select i1 %cond, double %a, double %b54  ret double %res55}56 57; Check equality comparisons with the high end of the unsigned 16-bit range.58define double @f5(double %a, double %b, ptr %ptr) {59; CHECK-LABEL: f5:60; CHECK: clfhsi 0(%r2), 6553561; CHECK-NEXT: ber %r1462; CHECK: ldr %f0, %f263; CHECK: br %r1464  %val = load i32, ptr %ptr65  %cond = icmp eq i32 %val, 6553566  %res = select i1 %cond, double %a, double %b67  ret double %res68}69 70; Check the next value up, which can't use CLFHSI.71define double @f6(double %a, double %b, ptr %ptr) {72; CHECK-LABEL: f6:73; CHECK-NOT: clfhsi74; CHECK: br %r1475  %val = load i32, ptr %ptr76  %cond = icmp eq i32 %val, 6553677  %res = select i1 %cond, double %a, double %b78  ret double %res79}80 81; Check the high end of the CLFHSI range.82define double @f7(double %a, double %b, i32 %i1, ptr %base) {83; CHECK-LABEL: f7:84; CHECK: clfhsi 4092(%r3), 185; CHECK-NEXT: bhr %r1486; CHECK: ldr %f0, %f287; CHECK: br %r1488  %ptr = getelementptr i32, ptr %base, i64 102389  %val = load i32, ptr %ptr90  %cond = icmp ugt i32 %val, 191  %res = select i1 %cond, double %a, double %b92  ret double %res93}94 95; Check the next word up, which needs separate address logic,96define double @f8(double %a, double %b, ptr %base) {97; CHECK-LABEL: f8:98; CHECK: aghi %r2, 409699; CHECK: clfhsi 0(%r2), 1100; CHECK-NEXT: bhr %r14101; CHECK: ldr %f0, %f2102; CHECK: br %r14103  %ptr = getelementptr i32, ptr %base, i64 1024104  %val = load i32, ptr %ptr105  %cond = icmp ugt i32 %val, 1106  %res = select i1 %cond, double %a, double %b107  ret double %res108}109 110; Check negative offsets, which also need separate address logic.111define double @f9(double %a, double %b, ptr %base) {112; CHECK-LABEL: f9:113; CHECK: aghi %r2, -4114; CHECK: clfhsi 0(%r2), 1115; CHECK-NEXT: bhr %r14116; CHECK: ldr %f0, %f2117; CHECK: br %r14118  %ptr = getelementptr i32, ptr %base, i64 -1119  %val = load i32, ptr %ptr120  %cond = icmp ugt i32 %val, 1121  %res = select i1 %cond, double %a, double %b122  ret double %res123}124 125; Check that CLFHSI does not allow indices.126define double @f10(double %a, double %b, i64 %base, i64 %index) {127; CHECK-LABEL: f10:128; CHECK: agr {{%r2, %r3|%r3, %r2}}129; CHECK: clfhsi 0({{%r[23]}}), 1130; CHECK-NEXT: bhr %r14131; CHECK: ldr %f0, %f2132; CHECK: br %r14133  %add = add i64 %base, %index134  %ptr = inttoptr i64 %add to ptr135  %val = load i32, ptr %ptr136  %cond = icmp ugt i32 %val, 1137  %res = select i1 %cond, double %a, double %b138  ret double %res139}140