@@ -1322,3 +1322,31 @@ define i32 @main15_logical(i32 %argc) {
1322
1322
%retval.0 = select i1 %or.cond , i32 2 , i32 1
1323
1323
ret i32 %retval.0
1324
1324
}
1325
+
1326
+ define i1 @no_masks_with_logical_or (i32 %a , i32 %b , i32 noundef %c ) {
1327
+ ; CHECK-LABEL: @no_masks_with_logical_or(
1328
+ ; CHECK-NEXT: [[CMP2:%.*]] = icmp ne i32 [[B:%.*]], 63
1329
+ ; CHECK-NEXT: [[TMP1:%.*]] = or i32 [[A:%.*]], [[C:%.*]]
1330
+ ; CHECK-NEXT: [[TMP2:%.*]] = icmp ne i32 [[TMP1]], 0
1331
+ ; CHECK-NEXT: [[OR2:%.*]] = select i1 [[TMP2]], i1 true, i1 [[CMP2]]
1332
+ ; CHECK-NEXT: ret i1 [[OR2]]
1333
+ ;
1334
+ %cmp1 = icmp ne i32 %a , 0
1335
+ %cmp2 = icmp ne i32 %b , 63
1336
+ %or1 = select i1 %cmp1 , i1 true , i1 %cmp2
1337
+ %cmp3 = icmp ne i32 %c , 0
1338
+ %or2 = or i1 %or1 , %cmp3
1339
+ ret i1 %or2
1340
+ }
1341
+
1342
+ define i1 @only_one_masked (i64 %a ) {
1343
+ ; CHECK-LABEL: @only_one_masked(
1344
+ ; CHECK-NEXT: [[AND:%.*]] = icmp eq i64 [[A:%.*]], -9223372036854775808
1345
+ ; CHECK-NEXT: ret i1 [[AND]]
1346
+ ;
1347
+ %cmp1 = icmp ne i64 %a , 0
1348
+ %a.mask = and i64 %a , 9223372036854775807
1349
+ %cmp2 = icmp eq i64 %a.mask , 0
1350
+ %and = and i1 %cmp1 , %cmp2
1351
+ ret i1 %and
1352
+ }
0 commit comments