@@ -1322,3 +1322,31 @@ define i32 @main15_logical(i32 %argc) {
13221322 %retval.0 = select i1 %or.cond , i32 2 , i32 1
13231323 ret i32 %retval.0
13241324}
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