@@ -1364,14 +1364,12 @@ define i1 @bitwise_and_bitwise_and_icmps_comm3(i8 %x, i8 %y, i8 %z) {
13641364define i1 @bitwise_and_logical_and_icmps (i8 %x , i8 %y , i8 %z ) {
13651365; CHECK-LABEL: @bitwise_and_logical_and_icmps(
13661366; CHECK-NEXT: [[C1:%.*]] = icmp eq i8 [[Y:%.*]], 42
1367- ; CHECK-NEXT: [[X_M1:%.*]] = and i8 [[X:%.*]], 1
13681367; CHECK-NEXT: [[Z_SHIFT:%.*]] = shl i8 1, [[Z:%.*]]
1369- ; CHECK-NEXT: [[X_M2:%.*]] = and i8 [[Z_SHIFT]], [[X]]
1370- ; CHECK-NEXT: [[C2:%.*]] = icmp ne i8 [[X_M1]], 0
1371- ; CHECK-NEXT: [[C3:%.*]] = icmp ne i8 [[X_M2]], 0
1372- ; CHECK-NEXT: [[AND1:%.*]] = select i1 [[C1]], i1 [[C2]], i1 false
1373- ; CHECK-NEXT: [[AND2:%.*]] = and i1 [[AND1]], [[C3]]
1374- ; CHECK-NEXT: ret i1 [[AND2]]
1368+ ; CHECK-NEXT: [[TMP1:%.*]] = or i8 [[Z_SHIFT]], 1
1369+ ; CHECK-NEXT: [[TMP2:%.*]] = and i8 [[TMP1]], [[X:%.*]]
1370+ ; CHECK-NEXT: [[TMP3:%.*]] = icmp eq i8 [[TMP2]], [[TMP1]]
1371+ ; CHECK-NEXT: [[TMP4:%.*]] = select i1 [[C1]], i1 [[TMP3]], i1 false
1372+ ; CHECK-NEXT: ret i1 [[TMP4]]
13751373;
13761374 %c1 = icmp eq i8 %y , 42
13771375 %x.m1 = and i8 %x , 1
@@ -1387,14 +1385,12 @@ define i1 @bitwise_and_logical_and_icmps(i8 %x, i8 %y, i8 %z) {
13871385define i1 @bitwise_and_logical_and_icmps_comm1 (i8 %x , i8 %y , i8 %z ) {
13881386; CHECK-LABEL: @bitwise_and_logical_and_icmps_comm1(
13891387; CHECK-NEXT: [[C1:%.*]] = icmp eq i8 [[Y:%.*]], 42
1390- ; CHECK-NEXT: [[X_M1:%.*]] = and i8 [[X:%.*]], 1
13911388; CHECK-NEXT: [[Z_SHIFT:%.*]] = shl i8 1, [[Z:%.*]]
1392- ; CHECK-NEXT: [[X_M2:%.*]] = and i8 [[Z_SHIFT]], [[X]]
1393- ; CHECK-NEXT: [[C2:%.*]] = icmp ne i8 [[X_M1]], 0
1394- ; CHECK-NEXT: [[C3:%.*]] = icmp ne i8 [[X_M2]], 0
1395- ; CHECK-NEXT: [[AND1:%.*]] = select i1 [[C1]], i1 [[C2]], i1 false
1396- ; CHECK-NEXT: [[AND2:%.*]] = and i1 [[C3]], [[AND1]]
1397- ; CHECK-NEXT: ret i1 [[AND2]]
1389+ ; CHECK-NEXT: [[TMP1:%.*]] = or i8 [[Z_SHIFT]], 1
1390+ ; CHECK-NEXT: [[TMP2:%.*]] = and i8 [[TMP1]], [[X:%.*]]
1391+ ; CHECK-NEXT: [[TMP3:%.*]] = icmp eq i8 [[TMP2]], [[TMP1]]
1392+ ; CHECK-NEXT: [[TMP4:%.*]] = select i1 [[C1]], i1 [[TMP3]], i1 false
1393+ ; CHECK-NEXT: ret i1 [[TMP4]]
13981394;
13991395 %c1 = icmp eq i8 %y , 42
14001396 %x.m1 = and i8 %x , 1
@@ -1410,14 +1406,13 @@ define i1 @bitwise_and_logical_and_icmps_comm1(i8 %x, i8 %y, i8 %z) {
14101406define i1 @bitwise_and_logical_and_icmps_comm2 (i8 %x , i8 %y , i8 %z ) {
14111407; CHECK-LABEL: @bitwise_and_logical_and_icmps_comm2(
14121408; CHECK-NEXT: [[C1:%.*]] = icmp eq i8 [[Y:%.*]], 42
1413- ; CHECK-NEXT: [[X_M1:%.*]] = and i8 [[X:%.*]], 1
14141409; CHECK-NEXT: [[Z_SHIFT:%.*]] = shl i8 1, [[Z:%.*]]
1415- ; CHECK-NEXT: [[X_M2 :%.*]] = and i8 [[Z_SHIFT]], [[X ]]
1416- ; CHECK-NEXT: [[C2 :%.*]] = icmp ne i8 [[X_M1 ]], 0
1417- ; CHECK-NEXT: [[C3 :%.*]] = icmp ne i8 [[X_M2 ]], 0
1418- ; CHECK-NEXT: [[AND1 :%.*]] = select i1 [[C2 ]], i1 [[C1]], i1 false
1419- ; CHECK-NEXT: [[AND2 :%.*]] = and i1 [[AND1 ]], [[C3]]
1420- ; CHECK-NEXT: ret i1 [[AND2 ]]
1410+ ; CHECK-NEXT: [[TMP1 :%.*]] = freeze i8 [[Z_SHIFT]]
1411+ ; CHECK-NEXT: [[TMP2 :%.*]] = or i8 [[TMP1 ]], 1
1412+ ; CHECK-NEXT: [[TMP3 :%.*]] = and i8 [[TMP2 ]], [[X:%.*]]
1413+ ; CHECK-NEXT: [[TMP4 :%.*]] = icmp eq i8 [[TMP3 ]], [[TMP2]]
1414+ ; CHECK-NEXT: [[TMP5 :%.*]] = select i1 [[TMP4 ]], i1 [[C1]], i1 false
1415+ ; CHECK-NEXT: ret i1 [[TMP5 ]]
14211416;
14221417 %c1 = icmp eq i8 %y , 42
14231418 %x.m1 = and i8 %x , 1
@@ -1433,14 +1428,12 @@ define i1 @bitwise_and_logical_and_icmps_comm2(i8 %x, i8 %y, i8 %z) {
14331428define i1 @bitwise_and_logical_and_icmps_comm3 (i8 %x , i8 %y , i8 %z ) {
14341429; CHECK-LABEL: @bitwise_and_logical_and_icmps_comm3(
14351430; CHECK-NEXT: [[C1:%.*]] = icmp eq i8 [[Y:%.*]], 42
1436- ; CHECK-NEXT: [[X_M1:%.*]] = and i8 [[X:%.*]], 1
14371431; CHECK-NEXT: [[Z_SHIFT:%.*]] = shl i8 1, [[Z:%.*]]
1438- ; CHECK-NEXT: [[X_M2:%.*]] = and i8 [[Z_SHIFT]], [[X]]
1439- ; CHECK-NEXT: [[C2:%.*]] = icmp ne i8 [[X_M1]], 0
1440- ; CHECK-NEXT: [[C3:%.*]] = icmp ne i8 [[X_M2]], 0
1441- ; CHECK-NEXT: [[AND1:%.*]] = select i1 [[C2]], i1 [[C1]], i1 false
1442- ; CHECK-NEXT: [[AND2:%.*]] = and i1 [[C3]], [[AND1]]
1443- ; CHECK-NEXT: ret i1 [[AND2]]
1432+ ; CHECK-NEXT: [[TMP1:%.*]] = or i8 [[Z_SHIFT]], 1
1433+ ; CHECK-NEXT: [[TMP2:%.*]] = and i8 [[TMP1]], [[X:%.*]]
1434+ ; CHECK-NEXT: [[TMP3:%.*]] = icmp eq i8 [[TMP2]], [[TMP1]]
1435+ ; CHECK-NEXT: [[TMP4:%.*]] = select i1 [[TMP3]], i1 [[C1]], i1 false
1436+ ; CHECK-NEXT: ret i1 [[TMP4]]
14441437;
14451438 %c1 = icmp eq i8 %y , 42
14461439 %x.m1 = and i8 %x , 1
@@ -1722,14 +1715,12 @@ define i1 @bitwise_or_bitwise_or_icmps_comm3(i8 %x, i8 %y, i8 %z) {
17221715define i1 @bitwise_or_logical_or_icmps (i8 %x , i8 %y , i8 %z ) {
17231716; CHECK-LABEL: @bitwise_or_logical_or_icmps(
17241717; CHECK-NEXT: [[C1:%.*]] = icmp eq i8 [[Y:%.*]], 42
1725- ; CHECK-NEXT: [[X_M1:%.*]] = and i8 [[X:%.*]], 1
17261718; CHECK-NEXT: [[Z_SHIFT:%.*]] = shl i8 1, [[Z:%.*]]
1727- ; CHECK-NEXT: [[X_M2:%.*]] = and i8 [[Z_SHIFT]], [[X]]
1728- ; CHECK-NEXT: [[C2:%.*]] = icmp eq i8 [[X_M1]], 0
1729- ; CHECK-NEXT: [[C3:%.*]] = icmp eq i8 [[X_M2]], 0
1730- ; CHECK-NEXT: [[OR1:%.*]] = select i1 [[C1]], i1 true, i1 [[C2]]
1731- ; CHECK-NEXT: [[OR2:%.*]] = or i1 [[OR1]], [[C3]]
1732- ; CHECK-NEXT: ret i1 [[OR2]]
1719+ ; CHECK-NEXT: [[TMP1:%.*]] = or i8 [[Z_SHIFT]], 1
1720+ ; CHECK-NEXT: [[TMP2:%.*]] = and i8 [[TMP1]], [[X:%.*]]
1721+ ; CHECK-NEXT: [[TMP3:%.*]] = icmp ne i8 [[TMP2]], [[TMP1]]
1722+ ; CHECK-NEXT: [[TMP4:%.*]] = select i1 [[C1]], i1 true, i1 [[TMP3]]
1723+ ; CHECK-NEXT: ret i1 [[TMP4]]
17331724;
17341725 %c1 = icmp eq i8 %y , 42
17351726 %x.m1 = and i8 %x , 1
@@ -1745,14 +1736,12 @@ define i1 @bitwise_or_logical_or_icmps(i8 %x, i8 %y, i8 %z) {
17451736define i1 @bitwise_or_logical_or_icmps_comm1 (i8 %x , i8 %y , i8 %z ) {
17461737; CHECK-LABEL: @bitwise_or_logical_or_icmps_comm1(
17471738; CHECK-NEXT: [[C1:%.*]] = icmp eq i8 [[Y:%.*]], 42
1748- ; CHECK-NEXT: [[X_M1:%.*]] = and i8 [[X:%.*]], 1
17491739; CHECK-NEXT: [[Z_SHIFT:%.*]] = shl i8 1, [[Z:%.*]]
1750- ; CHECK-NEXT: [[X_M2:%.*]] = and i8 [[Z_SHIFT]], [[X]]
1751- ; CHECK-NEXT: [[C2:%.*]] = icmp eq i8 [[X_M1]], 0
1752- ; CHECK-NEXT: [[C3:%.*]] = icmp eq i8 [[X_M2]], 0
1753- ; CHECK-NEXT: [[OR1:%.*]] = select i1 [[C1]], i1 true, i1 [[C2]]
1754- ; CHECK-NEXT: [[OR2:%.*]] = or i1 [[C3]], [[OR1]]
1755- ; CHECK-NEXT: ret i1 [[OR2]]
1740+ ; CHECK-NEXT: [[TMP1:%.*]] = or i8 [[Z_SHIFT]], 1
1741+ ; CHECK-NEXT: [[TMP2:%.*]] = and i8 [[TMP1]], [[X:%.*]]
1742+ ; CHECK-NEXT: [[TMP3:%.*]] = icmp ne i8 [[TMP2]], [[TMP1]]
1743+ ; CHECK-NEXT: [[TMP4:%.*]] = select i1 [[C1]], i1 true, i1 [[TMP3]]
1744+ ; CHECK-NEXT: ret i1 [[TMP4]]
17561745;
17571746 %c1 = icmp eq i8 %y , 42
17581747 %x.m1 = and i8 %x , 1
@@ -1768,14 +1757,13 @@ define i1 @bitwise_or_logical_or_icmps_comm1(i8 %x, i8 %y, i8 %z) {
17681757define i1 @bitwise_or_logical_or_icmps_comm2 (i8 %x , i8 %y , i8 %z ) {
17691758; CHECK-LABEL: @bitwise_or_logical_or_icmps_comm2(
17701759; CHECK-NEXT: [[C1:%.*]] = icmp eq i8 [[Y:%.*]], 42
1771- ; CHECK-NEXT: [[X_M1:%.*]] = and i8 [[X:%.*]], 1
17721760; CHECK-NEXT: [[Z_SHIFT:%.*]] = shl i8 1, [[Z:%.*]]
1773- ; CHECK-NEXT: [[X_M2 :%.*]] = and i8 [[Z_SHIFT]], [[X ]]
1774- ; CHECK-NEXT: [[C2 :%.*]] = icmp eq i8 [[X_M1 ]], 0
1775- ; CHECK-NEXT: [[C3 :%.*]] = icmp eq i8 [[X_M2 ]], 0
1776- ; CHECK-NEXT: [[OR1 :%.*]] = select i1 [[C2 ]], i1 true, i1 [[C1 ]]
1777- ; CHECK-NEXT: [[OR2 :%.*]] = or i1 [[OR1 ]], [[C3 ]]
1778- ; CHECK-NEXT: ret i1 [[OR2 ]]
1761+ ; CHECK-NEXT: [[TMP1 :%.*]] = freeze i8 [[Z_SHIFT]]
1762+ ; CHECK-NEXT: [[TMP2 :%.*]] = or i8 [[TMP1 ]], 1
1763+ ; CHECK-NEXT: [[TMP3 :%.*]] = and i8 [[TMP2 ]], [[X:%.*]]
1764+ ; CHECK-NEXT: [[TMP4 :%.*]] = icmp ne i8 [[TMP3 ]], [[TMP2 ]]
1765+ ; CHECK-NEXT: [[TMP5 :%.*]] = select i1 [[TMP4 ]], i1 true, i1 [[C1 ]]
1766+ ; CHECK-NEXT: ret i1 [[TMP5 ]]
17791767;
17801768 %c1 = icmp eq i8 %y , 42
17811769 %x.m1 = and i8 %x , 1
@@ -1791,14 +1779,12 @@ define i1 @bitwise_or_logical_or_icmps_comm2(i8 %x, i8 %y, i8 %z) {
17911779define i1 @bitwise_or_logical_or_icmps_comm3 (i8 %x , i8 %y , i8 %z ) {
17921780; CHECK-LABEL: @bitwise_or_logical_or_icmps_comm3(
17931781; CHECK-NEXT: [[C1:%.*]] = icmp eq i8 [[Y:%.*]], 42
1794- ; CHECK-NEXT: [[X_M1:%.*]] = and i8 [[X:%.*]], 1
17951782; CHECK-NEXT: [[Z_SHIFT:%.*]] = shl i8 1, [[Z:%.*]]
1796- ; CHECK-NEXT: [[X_M2:%.*]] = and i8 [[Z_SHIFT]], [[X]]
1797- ; CHECK-NEXT: [[C2:%.*]] = icmp eq i8 [[X_M1]], 0
1798- ; CHECK-NEXT: [[C3:%.*]] = icmp eq i8 [[X_M2]], 0
1799- ; CHECK-NEXT: [[OR1:%.*]] = select i1 [[C2]], i1 true, i1 [[C1]]
1800- ; CHECK-NEXT: [[OR2:%.*]] = or i1 [[C3]], [[OR1]]
1801- ; CHECK-NEXT: ret i1 [[OR2]]
1783+ ; CHECK-NEXT: [[TMP1:%.*]] = or i8 [[Z_SHIFT]], 1
1784+ ; CHECK-NEXT: [[TMP2:%.*]] = and i8 [[TMP1]], [[X:%.*]]
1785+ ; CHECK-NEXT: [[TMP3:%.*]] = icmp ne i8 [[TMP2]], [[TMP1]]
1786+ ; CHECK-NEXT: [[TMP4:%.*]] = select i1 [[TMP3]], i1 true, i1 [[C1]]
1787+ ; CHECK-NEXT: ret i1 [[TMP4]]
18021788;
18031789 %c1 = icmp eq i8 %y , 42
18041790 %x.m1 = and i8 %x , 1
0 commit comments