Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / SystemZ / int-cmp-56.ll
blob5b55e4a819db0419ba56b57d936607d074aa5f02
1 ; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z14 | FileCheck %s
3 ; Check that signed comparisons against 0 are only eliminated if the "nsw"
4 ; flag is present on the defining add (with register) instruction. For an
5 ; equality comparison, add logical can be used.
7 define i32 @fun0(i32 %arg, i32 %arg2, i32 %arg3) {
8 ; CHECK-LABEL: fun0:
9 ; CHECK: jle .LBB0_2{{$}}
10 ; CHECK: je .LBB0_4{{$}}
12 bb:
13   %tmp2 = add nsw i32 %arg, %arg2
14   %tmp3 = icmp sgt i32 %tmp2, 0
15   br i1 %tmp3, label %bb3, label %bb1
17 bb1:
18   %tmp4 = add nsw i32 %arg, %arg3
19   %tmp5 = icmp eq i32 %tmp4, 0
20   br i1 %tmp5, label %bb4, label %bb2
22 bb2:
23   ret i32 0
25 bb3:
26   ret i32 1
28 bb4:
29   ret i32 2
32 ; No "nsw" flag
33 define i32 @fun1(i32 %arg, i32 %arg2, i32 %arg3) {
34 ; CHECK-LABEL: fun1:
35 ; CHECK: cijle
36 ; CHECK: alr
37 ; CHECK: jhe
39 bb:
40   %tmp2 = add i32 %arg, %arg2
41   %tmp3 = icmp sgt i32 %tmp2, 0
42   br i1 %tmp3, label %bb3, label %bb1
44 bb1:
45   %tmp4 = add i32 %arg, %arg3
46   %tmp5 = icmp eq i32 %tmp4, 0
47   br i1 %tmp5, label %bb4, label %bb2
49 bb2:
50   ret i32 0
52 bb3:
53   ret i32 1
55 bb4:
56   ret i32 2
59 ; "nuw" flag
60 define i32 @fun2(i32 %arg, i32 %arg2, i32 %arg3) {
61 ; CHECK-LABEL: fun2:
62 ; CHECK: cijle
63 ; CHECK: alr
64 ; CHECK: jhe
66 bb:
67   %tmp2 = add nuw i32 %arg, %arg2
68   %tmp3 = icmp sgt i32 %tmp2, 0
69   br i1 %tmp3, label %bb3, label %bb1
71 bb1:
72   %tmp4 = add nuw i32 %arg, %arg3
73   %tmp5 = icmp eq i32 %tmp4, 0
74   br i1 %tmp5, label %bb4, label %bb2
76 bb2:
77   ret i32 0
79 bb3:
80   ret i32 1
82 bb4:
83   ret i32 2
86 ; Subtraction does not produce the value of zero in case of overflow, so
87 ; "nsw" is not needed for the equality check against zero.
88 define i32 @fun3(i32 %arg, i32 %arg2, i32 %arg3) {
89 ; CHECK-LABEL: fun3:
90 ; CHECK: jle .LBB3_2{{$}}
91 ; CHECK: je .LBB3_4{{$}}
93 bb:
94   %tmp2 = sub nsw i32 %arg, %arg2
95   %tmp3 = icmp sgt i32 %tmp2, 0
96   br i1 %tmp3, label %bb3, label %bb1
98 bb1:
99   %tmp4 = sub nsw i32 %arg, %arg3
100   %tmp5 = icmp eq i32 %tmp4, 0
101   br i1 %tmp5, label %bb4, label %bb2
103 bb2:
104   ret i32 0
106 bb3:
107   ret i32 1
109 bb4:
110   ret i32 2
113 ; No "nsw" flag
114 define i32 @fun4(i32 %arg, i32 %arg2, i32 %arg3) {
115 ; CHECK-LABEL: fun4:
116 ; CHECK: cijle
117 ; CHECK: je .LBB4_4{{$}}
120   %tmp2 = sub i32 %arg, %arg2
121   %tmp3 = icmp sgt i32 %tmp2, 0
122   br i1 %tmp3, label %bb3, label %bb1
124 bb1:
125   %tmp4 = sub i32 %arg, %arg3
126   %tmp5 = icmp eq i32 %tmp4, 0
127   br i1 %tmp5, label %bb4, label %bb2
129 bb2:
130   ret i32 0
132 bb3:
133   ret i32 1
135 bb4:
136   ret i32 2
139 ; "nuw" flag
140 define i32 @fun5(i32 %arg, i32 %arg2, i32 %arg3) {
141 ; CHECK-LABEL: fun5:
142 ; CHECK: cijle
143 ; CHECK: je .LBB5_4{{$}}
146   %tmp2 = sub nuw i32 %arg, %arg2
147   %tmp3 = icmp sgt i32 %tmp2, 0
148   br i1 %tmp3, label %bb3, label %bb1
150 bb1:
151   %tmp4 = sub nuw i32 %arg, %arg3
152   %tmp5 = icmp eq i32 %tmp4, 0
153   br i1 %tmp5, label %bb4, label %bb2
155 bb2:
156   ret i32 0
158 bb3:
159   ret i32 1
161 bb4:
162   ret i32 2