[docs] Add LICENSE.txt to the root of the mono-repo
[llvm-project.git] / llvm / test / CodeGen / SystemZ / int-cmp-57.ll
blob8182d91ee804ad8aa9a8a1463e8dc57fca43db53
1 ; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z14 -disable-cgp | FileCheck %s
3 ; Check that signed comparisons against 0 are eliminated if the defining
4 ; instruction is an add with immediate.
6 ; Addition of an immediate does not depend on the "nsw" flag, since the
7 ; result can be predicted in case of overflow. For example, if adding a
8 ; positive immediate gives overflow, the result must be negative.
10 ; Addition of a negative immediate gives a positive result in case of
11 ; overflow (except for the case of the minimum value which may also result in
12 ; a zero result).
13 define i32 @fun0(i32 %arg) {
14 ; CHECK-LABEL: fun0:
15 ; CHECK: ahik
16 ; CHECK-NEXT: locre
17 bb:
18   %tmp = add i32 %arg, -1
19   %tmp1 = icmp eq i32 %tmp, 0
20   %res = select i1 %tmp1, i32 %tmp, i32 %arg
21   ret i32 %res
24 define i32 @fun1(i32 %arg) {
25 ; CHECK-LABEL: fun1:
26 ; CHECK: ahik
27 ; CHECK-NEXT: locrnle
28 bb:
29   %tmp = add i32 %arg, -1
30   %tmp1 = icmp sgt i32 %tmp, 0
31   %res = select i1 %tmp1, i32 %tmp, i32 %arg
32   ret i32 %res
35 define i32 @fun2(i32 %arg) {
36 ; CHECK-LABEL: fun2:
37 ; CHECK: ahik
38 ; CHECK-NEXT: locrl
39 bb:
40   %tmp = add i32 %arg, -1
41   %tmp1 = icmp slt i32 %tmp, 0
42   %res = select i1 %tmp1, i32 %tmp, i32 %arg
43   ret i32 %res
46 ; Addition of a positive immediate gives a negative result in case of overflow.
47 define i32 @fun3(i32 %arg) {
48 ; CHECK-LABEL: fun3:
49 ; CHECK: ahik
50 ; CHECK-NEXT: locre
51 bb:
52   %tmp = add i32 %arg, 1
53   %tmp1 = icmp eq i32 %tmp, 0
54   %res = select i1 %tmp1, i32 %tmp, i32 %arg
55   ret i32 %res
58 define i32 @fun4(i32 %arg) {
59 ; CHECK-LABEL: fun4:
60 ; CHECK: ahik
61 ; CHECK-NEXT: locrh
62 bb:
63   %tmp = add i32 %arg, 1
64   %tmp1 = icmp sgt i32 %tmp, 0
65   %res = select i1 %tmp1, i32 %tmp, i32 %arg
66   ret i32 %res
69 define i32 @fun5(i32 %arg) {
70 ; CHECK-LABEL: fun5:
71 ; CHECK: ahik
72 ; CHECK-NEXT: locrnhe
73 bb:
74   %tmp = add i32 %arg, 1
75   %tmp1 = icmp slt i32 %tmp, 0
76   %res = select i1 %tmp1, i32 %tmp, i32 %arg
77   ret i32 %res
80 ; Addition of the minimum value gives a positive or zero result.
81 define i32 @fun6(i32 %arg) {
82 ; CHECK-LABEL: fun6:
83 ; CHECK: afi
84 ; CHECK-NEXT: chi
85 ; CHECK-NEXT: locre
86 bb:
87   %tmp = add i32 %arg, -2147483648
88   %tmp1 = icmp eq i32 %tmp, 0
89   %res = select i1 %tmp1, i32 %tmp, i32 %arg
90   ret i32 %res
93 define i32 @fun7(i32 %arg) {
94 ; CHECK-LABEL: fun7:
95 ; CHECK: afi
96 ; CHECK-NEXT: chi
97 ; CHECK-NEXT: locrh
98 bb:
99   %tmp = add i32 %arg, -2147483648
100   %tmp1 = icmp sgt i32 %tmp, 0
101   %res = select i1 %tmp1, i32 %tmp, i32 %arg
102   ret i32 %res