brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.4 KiB · 8182d91 Raw
104 lines · plain
1; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z14 -disable-cgp | FileCheck %s2;3; Check that signed comparisons against 0 are eliminated if the defining4; instruction is an add with immediate.5;6; Addition of an immediate does not depend on the "nsw" flag, since the7; result can be predicted in case of overflow. For example, if adding a8; positive immediate gives overflow, the result must be negative.9 10; Addition of a negative immediate gives a positive result in case of11; overflow (except for the case of the minimum value which may also result in12; a zero result).13define i32 @fun0(i32 %arg) {14; CHECK-LABEL: fun0:15; CHECK: ahik16; CHECK-NEXT: locre17bb:18  %tmp = add i32 %arg, -119  %tmp1 = icmp eq i32 %tmp, 020  %res = select i1 %tmp1, i32 %tmp, i32 %arg21  ret i32 %res22}23 24define i32 @fun1(i32 %arg) {25; CHECK-LABEL: fun1:26; CHECK: ahik27; CHECK-NEXT: locrnle28bb:29  %tmp = add i32 %arg, -130  %tmp1 = icmp sgt i32 %tmp, 031  %res = select i1 %tmp1, i32 %tmp, i32 %arg32  ret i32 %res33}34 35define i32 @fun2(i32 %arg) {36; CHECK-LABEL: fun2:37; CHECK: ahik38; CHECK-NEXT: locrl39bb:40  %tmp = add i32 %arg, -141  %tmp1 = icmp slt i32 %tmp, 042  %res = select i1 %tmp1, i32 %tmp, i32 %arg43  ret i32 %res44}45 46; Addition of a positive immediate gives a negative result in case of overflow.47define i32 @fun3(i32 %arg) {48; CHECK-LABEL: fun3:49; CHECK: ahik50; CHECK-NEXT: locre51bb:52  %tmp = add i32 %arg, 153  %tmp1 = icmp eq i32 %tmp, 054  %res = select i1 %tmp1, i32 %tmp, i32 %arg55  ret i32 %res56}57 58define i32 @fun4(i32 %arg) {59; CHECK-LABEL: fun4:60; CHECK: ahik61; CHECK-NEXT: locrh62bb:63  %tmp = add i32 %arg, 164  %tmp1 = icmp sgt i32 %tmp, 065  %res = select i1 %tmp1, i32 %tmp, i32 %arg66  ret i32 %res67}68 69define i32 @fun5(i32 %arg) {70; CHECK-LABEL: fun5:71; CHECK: ahik72; CHECK-NEXT: locrnhe73bb:74  %tmp = add i32 %arg, 175  %tmp1 = icmp slt i32 %tmp, 076  %res = select i1 %tmp1, i32 %tmp, i32 %arg77  ret i32 %res78}79 80; Addition of the minimum value gives a positive or zero result.81define i32 @fun6(i32 %arg) {82; CHECK-LABEL: fun6:83; CHECK: afi84; CHECK-NEXT: chi85; CHECK-NEXT: locre86bb:87  %tmp = add i32 %arg, -214748364888  %tmp1 = icmp eq i32 %tmp, 089  %res = select i1 %tmp1, i32 %tmp, i32 %arg90  ret i32 %res91}92 93define i32 @fun7(i32 %arg) {94; CHECK-LABEL: fun7:95; CHECK: afi96; CHECK-NEXT: chi97; CHECK-NEXT: locrh98bb:99  %tmp = add i32 %arg, -2147483648100  %tmp1 = icmp sgt i32 %tmp, 0101  %res = select i1 %tmp1, i32 %tmp, i32 %arg102  ret i32 %res103}104