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) {
9 ; CHECK: jle .LBB0_2{{$}}
10 ; CHECK: je .LBB0_4{{$}}
13 %tmp2 = add nsw i32 %arg, %arg2
14 %tmp3 = icmp sgt i32 %tmp2, 0
15 br i1 %tmp3, label %bb3, label %bb1
18 %tmp4 = add nsw i32 %arg, %arg3
19 %tmp5 = icmp eq i32 %tmp4, 0
20 br i1 %tmp5, label %bb4, label %bb2
33 define i32 @fun1(i32 %arg, i32 %arg2, i32 %arg3) {
40 %tmp2 = add i32 %arg, %arg2
41 %tmp3 = icmp sgt i32 %tmp2, 0
42 br i1 %tmp3, label %bb3, label %bb1
45 %tmp4 = add i32 %arg, %arg3
46 %tmp5 = icmp eq i32 %tmp4, 0
47 br i1 %tmp5, label %bb4, label %bb2
60 define i32 @fun2(i32 %arg, i32 %arg2, i32 %arg3) {
67 %tmp2 = add nuw i32 %arg, %arg2
68 %tmp3 = icmp sgt i32 %tmp2, 0
69 br i1 %tmp3, label %bb3, label %bb1
72 %tmp4 = add nuw i32 %arg, %arg3
73 %tmp5 = icmp eq i32 %tmp4, 0
74 br i1 %tmp5, label %bb4, label %bb2
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) {
90 ; CHECK: jle .LBB3_2{{$}}
91 ; CHECK: je .LBB3_4{{$}}
94 %tmp2 = sub nsw i32 %arg, %arg2
95 %tmp3 = icmp sgt i32 %tmp2, 0
96 br i1 %tmp3, label %bb3, label %bb1
99 %tmp4 = sub nsw i32 %arg, %arg3
100 %tmp5 = icmp eq i32 %tmp4, 0
101 br i1 %tmp5, label %bb4, label %bb2
114 define i32 @fun4(i32 %arg, i32 %arg2, i32 %arg3) {
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
125 %tmp4 = sub i32 %arg, %arg3
126 %tmp5 = icmp eq i32 %tmp4, 0
127 br i1 %tmp5, label %bb4, label %bb2
140 define i32 @fun5(i32 %arg, i32 %arg2, i32 %arg3) {
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
151 %tmp4 = sub nuw i32 %arg, %arg3
152 %tmp5 = icmp eq i32 %tmp4, 0
153 br i1 %tmp5, label %bb4, label %bb2