brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.7 KiB · 5b55e4a Raw
164 lines · plain
1; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z14 | FileCheck %s2;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 an5; equality comparison, add logical can be used.6 7define i32 @fun0(i32 %arg, i32 %arg2, i32 %arg3) {8; CHECK-LABEL: fun0:9; CHECK: jle .LBB0_2{{$}}10; CHECK: je .LBB0_4{{$}}11 12bb:13  %tmp2 = add nsw i32 %arg, %arg214  %tmp3 = icmp sgt i32 %tmp2, 015  br i1 %tmp3, label %bb3, label %bb116 17bb1:18  %tmp4 = add nsw i32 %arg, %arg319  %tmp5 = icmp eq i32 %tmp4, 020  br i1 %tmp5, label %bb4, label %bb221 22bb2:23  ret i32 024 25bb3:26  ret i32 127 28bb4:29  ret i32 230}31 32; No "nsw" flag33define i32 @fun1(i32 %arg, i32 %arg2, i32 %arg3) {34; CHECK-LABEL: fun1:35; CHECK: cijle36; CHECK: alr37; CHECK: jhe38 39bb:40  %tmp2 = add i32 %arg, %arg241  %tmp3 = icmp sgt i32 %tmp2, 042  br i1 %tmp3, label %bb3, label %bb143 44bb1:45  %tmp4 = add i32 %arg, %arg346  %tmp5 = icmp eq i32 %tmp4, 047  br i1 %tmp5, label %bb4, label %bb248 49bb2:50  ret i32 051 52bb3:53  ret i32 154 55bb4:56  ret i32 257}58 59; "nuw" flag60define i32 @fun2(i32 %arg, i32 %arg2, i32 %arg3) {61; CHECK-LABEL: fun2:62; CHECK: cijle63; CHECK: alr64; CHECK: jhe65 66bb:67  %tmp2 = add nuw i32 %arg, %arg268  %tmp3 = icmp sgt i32 %tmp2, 069  br i1 %tmp3, label %bb3, label %bb170 71bb1:72  %tmp4 = add nuw i32 %arg, %arg373  %tmp5 = icmp eq i32 %tmp4, 074  br i1 %tmp5, label %bb4, label %bb275 76bb2:77  ret i32 078 79bb3:80  ret i32 181 82bb4:83  ret i32 284}85 86; Subtraction does not produce the value of zero in case of overflow, so87; "nsw" is not needed for the equality check against zero.88define i32 @fun3(i32 %arg, i32 %arg2, i32 %arg3) {89; CHECK-LABEL: fun3:90; CHECK: jle .LBB3_2{{$}}91; CHECK: je .LBB3_4{{$}}92 93bb:94  %tmp2 = sub nsw i32 %arg, %arg295  %tmp3 = icmp sgt i32 %tmp2, 096  br i1 %tmp3, label %bb3, label %bb197 98bb1:99  %tmp4 = sub nsw i32 %arg, %arg3100  %tmp5 = icmp eq i32 %tmp4, 0101  br i1 %tmp5, label %bb4, label %bb2102 103bb2:104  ret i32 0105 106bb3:107  ret i32 1108 109bb4:110  ret i32 2111}112 113; No "nsw" flag114define i32 @fun4(i32 %arg, i32 %arg2, i32 %arg3) {115; CHECK-LABEL: fun4:116; CHECK: cijle117; CHECK: je .LBB4_4{{$}}118 119bb:120  %tmp2 = sub i32 %arg, %arg2121  %tmp3 = icmp sgt i32 %tmp2, 0122  br i1 %tmp3, label %bb3, label %bb1123 124bb1:125  %tmp4 = sub i32 %arg, %arg3126  %tmp5 = icmp eq i32 %tmp4, 0127  br i1 %tmp5, label %bb4, label %bb2128 129bb2:130  ret i32 0131 132bb3:133  ret i32 1134 135bb4:136  ret i32 2137}138 139; "nuw" flag140define i32 @fun5(i32 %arg, i32 %arg2, i32 %arg3) {141; CHECK-LABEL: fun5:142; CHECK: cijle143; CHECK: je .LBB5_4{{$}}144 145bb:146  %tmp2 = sub nuw i32 %arg, %arg2147  %tmp3 = icmp sgt i32 %tmp2, 0148  br i1 %tmp3, label %bb3, label %bb1149 150bb1:151  %tmp4 = sub nuw i32 %arg, %arg3152  %tmp5 = icmp eq i32 %tmp4, 0153  br i1 %tmp5, label %bb4, label %bb2154 155bb2:156  ret i32 0157 158bb3:159  ret i32 1160 161bb4:162  ret i32 2163}164