@@ -1302,9 +1302,9 @@ define i1 @lshr_neg_sgt_zero(i8 %x) {
13021302
13031303define  i1  @exactly_one_set_signbit (i8  %x , i8  %y ) {
13041304; CHECK-LABEL: @exactly_one_set_signbit( 
1305- ; CHECK-NEXT:    [[XOR_SIGNBITS :%.*]] = xor i8 [[X:%.*]], [[Y:%.*]] 
1306- ; CHECK-NEXT:    [[R :%.*]] = icmp slt i8 [[XOR_SIGNBITS ]], 0 
1307- ; CHECK-NEXT:    ret i1 [[R ]] 
1305+ ; CHECK-NEXT:    [[TMP1 :%.*]] = xor i8 [[X:%.*]], [[Y:%.*]] 
1306+ ; CHECK-NEXT:    [[TMP2 :%.*]] = icmp slt i8 [[TMP1 ]], 0 
1307+ ; CHECK-NEXT:    ret i1 [[TMP2 ]] 
13081308; 
13091309  %xsign  = lshr  i8  %x , 7 
13101310  %ypos  = icmp  sgt  i8  %y , -1 
@@ -1317,9 +1317,9 @@ define i1 @exactly_one_set_signbit_use1(i8 %x, i8 %y) {
13171317; CHECK-LABEL: @exactly_one_set_signbit_use1( 
13181318; CHECK-NEXT:    [[XSIGN:%.*]] = lshr i8 [[X:%.*]], 7 
13191319; CHECK-NEXT:    call void @use(i8 [[XSIGN]]) 
1320- ; CHECK-NEXT:    [[XOR_SIGNBITS :%.*]] = xor i8 [[X]], [[Y:%.*]] 
1321- ; CHECK-NEXT:    [[R :%.*]] = icmp slt i8 [[XOR_SIGNBITS ]], 0 
1322- ; CHECK-NEXT:    ret i1 [[R ]] 
1320+ ; CHECK-NEXT:    [[TMP1 :%.*]] = xor i8 [[X]], [[Y:%.*]] 
1321+ ; CHECK-NEXT:    [[TMP2 :%.*]] = icmp slt i8 [[TMP1 ]], 0 
1322+ ; CHECK-NEXT:    ret i1 [[TMP2 ]] 
13231323; 
13241324  %xsign  = lshr  i8  %x , 7 
13251325  call  void  @use (i8  %xsign )
@@ -1331,9 +1331,9 @@ define i1 @exactly_one_set_signbit_use1(i8 %x, i8 %y) {
13311331
13321332define  <2  x i1 > @same_signbit (<2  x i8 > %x , <2  x i8 > %y ) {
13331333; CHECK-LABEL: @same_signbit( 
1334- ; CHECK-NEXT:    [[XOR_SIGNBITS :%.*]] = xor <2 x i8> [[X:%.*]], [[Y:%.*]] 
1335- ; CHECK-NEXT:    [[R :%.*]] = icmp sgt <2 x i8> [[XOR_SIGNBITS ]], <i8 -1, i8 -1> 
1336- ; CHECK-NEXT:    ret <2 x i1> [[R ]] 
1334+ ; CHECK-NEXT:    [[TMP1 :%.*]] = xor <2 x i8> [[X:%.*]], [[Y:%.*]] 
1335+ ; CHECK-NEXT:    [[R1 :%.*]] = icmp sgt <2 x i8> [[TMP1 ]], <i8 -1, i8 -1> 
1336+ ; CHECK-NEXT:    ret <2 x i1> [[R1 ]] 
13371337; 
13381338  %xsign  = lshr  <2  x i8 > %x , <i8  7 , i8  7 >
13391339  %ypos  = icmp  sgt  <2  x i8 > %y , <i8  -1 , i8  -1 >
@@ -1347,9 +1347,9 @@ define i1 @same_signbit_use2(i8 %x, i8 %y) {
13471347; CHECK-NEXT:    [[YPOS:%.*]] = icmp sgt i8 [[Y:%.*]], -1 
13481348; CHECK-NEXT:    [[YPOSZ:%.*]] = zext i1 [[YPOS]] to i8 
13491349; CHECK-NEXT:    call void @use(i8 [[YPOSZ]]) 
1350- ; CHECK-NEXT:    [[XOR_SIGNBITS :%.*]] = xor i8 [[X:%.*]], [[Y]] 
1351- ; CHECK-NEXT:    [[R :%.*]] = icmp sgt i8 [[XOR_SIGNBITS ]], -1 
1352- ; CHECK-NEXT:    ret i1 [[R ]] 
1350+ ; CHECK-NEXT:    [[TMP1 :%.*]] = xor i8 [[X:%.*]], [[Y]] 
1351+ ; CHECK-NEXT:    [[R1 :%.*]] = icmp sgt i8 [[TMP1 ]], -1 
1352+ ; CHECK-NEXT:    ret i1 [[R1 ]] 
13531353; 
13541354  %xsign  = lshr  i8  %x , 7 
13551355  %ypos  = icmp  sgt  i8  %y , -1 
@@ -1382,9 +1382,10 @@ define i1 @same_signbit_use3(i8 %x, i8 %y) {
13821382
13831383define  <2  x i1 > @same_signbit_poison_elts (<2  x i8 > %x , <2  x i8 > %y ) {
13841384; CHECK-LABEL: @same_signbit_poison_elts( 
1385- ; CHECK-NEXT:    [[XOR_SIGNBITS:%.*]] = xor <2 x i8> [[X:%.*]], [[Y:%.*]] 
1386- ; CHECK-NEXT:    [[R:%.*]] = icmp sgt <2 x i8> [[XOR_SIGNBITS]], <i8 -1, i8 -1> 
1387- ; CHECK-NEXT:    ret <2 x i1> [[R]] 
1385+ ; CHECK-NEXT:    [[YPOS:%.*]] = icmp sgt <2 x i8> [[Y:%.*]], <i8 -1, i8 poison> 
1386+ ; CHECK-NEXT:    [[TMP1:%.*]] = icmp slt <2 x i8> [[X:%.*]], zeroinitializer 
1387+ ; CHECK-NEXT:    [[R1:%.*]] = xor <2 x i1> [[TMP1]], [[YPOS]] 
1388+ ; CHECK-NEXT:    ret <2 x i1> [[R1]] 
13881389; 
13891390  %xsign  = lshr  <2  x i8 > %x , <i8  7 , i8  poison>
13901391  %ypos  = icmp  sgt  <2  x i8 > %y , <i8  -1 , i8  poison>
@@ -1397,11 +1398,10 @@ define <2 x i1> @same_signbit_poison_elts(<2 x i8> %x, <2 x i8> %y) {
13971398
13981399define  i1  @same_signbit_wrong_type (i8  %x , i32  %y ) {
13991400; CHECK-LABEL: @same_signbit_wrong_type( 
1400- ; CHECK-NEXT:    [[XSIGN:%.*]] = lshr i8 [[X:%.*]], 7 
14011401; CHECK-NEXT:    [[YPOS:%.*]] = icmp sgt i32 [[Y:%.*]], -1 
1402- ; CHECK-NEXT:    [[YPOSZ :%.*]] = zext i1 [[YPOS]] to i8  
1403- ; CHECK-NEXT:    [[R :%.*]] = icmp ne i8 [[XSIGN ]], [[YPOSZ ]] 
1404- ; CHECK-NEXT:    ret i1 [[R ]] 
1402+ ; CHECK-NEXT:    [[TMP1 :%.*]] = icmp slt i8 [[X:%.*]], 0  
1403+ ; CHECK-NEXT:    [[R1 :%.*]] = xor i1 [[TMP1 ]], [[YPOS ]] 
1404+ ; CHECK-NEXT:    ret i1 [[R1 ]] 
14051405; 
14061406  %xsign  = lshr  i8  %x , 7 
14071407  %ypos  = icmp  sgt  i32  %y , -1 
@@ -1450,11 +1450,9 @@ define i1 @exactly_one_set_signbit_wrong_shr(i8 %x, i8 %y) {
14501450
14511451define  i1  @exactly_one_set_signbit_wrong_pred (i8  %x , i8  %y ) {
14521452; CHECK-LABEL: @exactly_one_set_signbit_wrong_pred( 
1453- ; CHECK-NEXT:    [[XSIGN:%.*]] = lshr i8 [[X:%.*]], 7 
1454- ; CHECK-NEXT:    [[YPOS:%.*]] = icmp sgt i8 [[Y:%.*]], -1 
1455- ; CHECK-NEXT:    [[YPOSZ:%.*]] = zext i1 [[YPOS]] to i8 
1456- ; CHECK-NEXT:    [[R:%.*]] = icmp ugt i8 [[XSIGN]], [[YPOSZ]] 
1457- ; CHECK-NEXT:    ret i1 [[R]] 
1453+ ; CHECK-NEXT:    [[TMP1:%.*]] = and i8 [[Y:%.*]], [[X:%.*]] 
1454+ ; CHECK-NEXT:    [[R1:%.*]] = icmp slt i8 [[TMP1]], 0 
1455+ ; CHECK-NEXT:    ret i1 [[R1]] 
14581456; 
14591457  %xsign  = lshr  i8  %x , 7 
14601458  %ypos  = icmp  sgt  i8  %y , -1 
@@ -1465,9 +1463,9 @@ define i1 @exactly_one_set_signbit_wrong_pred(i8 %x, i8 %y) {
14651463
14661464define  i1  @exactly_one_set_signbit_signed (i8  %x , i8  %y ) {
14671465; CHECK-LABEL: @exactly_one_set_signbit_signed( 
1468- ; CHECK-NEXT:    [[XOR_SIGNBITS :%.*]] = xor i8 [[X:%.*]], [[Y:%.*]] 
1469- ; CHECK-NEXT:    [[R :%.*]] = icmp slt i8 [[XOR_SIGNBITS ]], 0 
1470- ; CHECK-NEXT:    ret i1 [[R ]] 
1466+ ; CHECK-NEXT:    [[TMP1 :%.*]] = xor i8 [[X:%.*]], [[Y:%.*]] 
1467+ ; CHECK-NEXT:    [[TMP2 :%.*]] = icmp slt i8 [[TMP1 ]], 0 
1468+ ; CHECK-NEXT:    ret i1 [[TMP2 ]] 
14711469; 
14721470  %xsign  = ashr  i8  %x , 7 
14731471  %ypos  = icmp  sgt  i8  %y , -1 
@@ -1480,9 +1478,9 @@ define i1 @exactly_one_set_signbit_use1_signed(i8 %x, i8 %y) {
14801478; CHECK-LABEL: @exactly_one_set_signbit_use1_signed( 
14811479; CHECK-NEXT:    [[XSIGN:%.*]] = ashr i8 [[X:%.*]], 7 
14821480; CHECK-NEXT:    call void @use(i8 [[XSIGN]]) 
1483- ; CHECK-NEXT:    [[XOR_SIGNBITS :%.*]] = xor i8 [[X]], [[Y:%.*]] 
1484- ; CHECK-NEXT:    [[R :%.*]] = icmp slt i8 [[XOR_SIGNBITS ]], 0 
1485- ; CHECK-NEXT:    ret i1 [[R ]] 
1481+ ; CHECK-NEXT:    [[TMP1 :%.*]] = xor i8 [[X]], [[Y:%.*]] 
1482+ ; CHECK-NEXT:    [[TMP2 :%.*]] = icmp slt i8 [[TMP1 ]], 0 
1483+ ; CHECK-NEXT:    ret i1 [[TMP2 ]] 
14861484; 
14871485  %xsign  = ashr  i8  %x , 7 
14881486  call  void  @use (i8  %xsign )
@@ -1494,9 +1492,9 @@ define i1 @exactly_one_set_signbit_use1_signed(i8 %x, i8 %y) {
14941492
14951493define  <2  x i1 > @same_signbit_signed (<2  x i8 > %x , <2  x i8 > %y ) {
14961494; CHECK-LABEL: @same_signbit_signed( 
1497- ; CHECK-NEXT:    [[XOR_SIGNBITS :%.*]] = xor <2 x i8> [[X:%.*]], [[Y:%.*]] 
1498- ; CHECK-NEXT:    [[R :%.*]] = icmp sgt <2 x i8> [[XOR_SIGNBITS ]], <i8 -1, i8 -1> 
1499- ; CHECK-NEXT:    ret <2 x i1> [[R ]] 
1495+ ; CHECK-NEXT:    [[TMP1 :%.*]] = xor <2 x i8> [[X:%.*]], [[Y:%.*]] 
1496+ ; CHECK-NEXT:    [[R1 :%.*]] = icmp sgt <2 x i8> [[TMP1 ]], <i8 -1, i8 -1> 
1497+ ; CHECK-NEXT:    ret <2 x i1> [[R1 ]] 
15001498; 
15011499  %xsign  = ashr  <2  x i8 > %x , <i8  7 , i8  7 >
15021500  %ypos  = icmp  sgt  <2  x i8 > %y , <i8  -1 , i8  -1 >
@@ -1510,9 +1508,9 @@ define i1 @same_signbit_use2_signed(i8 %x, i8 %y) {
15101508; CHECK-NEXT:    [[YPOS:%.*]] = icmp sgt i8 [[Y:%.*]], -1 
15111509; CHECK-NEXT:    [[YPOSZ:%.*]] = sext i1 [[YPOS]] to i8 
15121510; CHECK-NEXT:    call void @use(i8 [[YPOSZ]]) 
1513- ; CHECK-NEXT:    [[XOR_SIGNBITS :%.*]] = xor i8 [[X:%.*]], [[Y]] 
1514- ; CHECK-NEXT:    [[R :%.*]] = icmp sgt i8 [[XOR_SIGNBITS ]], -1 
1515- ; CHECK-NEXT:    ret i1 [[R ]] 
1511+ ; CHECK-NEXT:    [[TMP1 :%.*]] = xor i8 [[X:%.*]], [[Y]] 
1512+ ; CHECK-NEXT:    [[R1 :%.*]] = icmp sgt i8 [[TMP1 ]], -1 
1513+ ; CHECK-NEXT:    ret i1 [[R1 ]] 
15161514; 
15171515  %xsign  = ashr  i8  %x , 7 
15181516  %ypos  = icmp  sgt  i8  %y , -1 
@@ -1545,9 +1543,10 @@ define i1 @same_signbit_use3_signed(i8 %x, i8 %y) {
15451543
15461544define  <2  x i1 > @same_signbit_poison_elts_signed (<2  x i8 > %x , <2  x i8 > %y ) {
15471545; CHECK-LABEL: @same_signbit_poison_elts_signed( 
1548- ; CHECK-NEXT:    [[XOR_SIGNBITS:%.*]] = xor <2 x i8> [[X:%.*]], [[Y:%.*]] 
1549- ; CHECK-NEXT:    [[R:%.*]] = icmp sgt <2 x i8> [[XOR_SIGNBITS]], <i8 -1, i8 -1> 
1550- ; CHECK-NEXT:    ret <2 x i1> [[R]] 
1546+ ; CHECK-NEXT:    [[YPOS:%.*]] = icmp sgt <2 x i8> [[Y:%.*]], <i8 -1, i8 poison> 
1547+ ; CHECK-NEXT:    [[TMP1:%.*]] = icmp slt <2 x i8> [[X:%.*]], zeroinitializer 
1548+ ; CHECK-NEXT:    [[R1:%.*]] = xor <2 x i1> [[TMP1]], [[YPOS]] 
1549+ ; CHECK-NEXT:    ret <2 x i1> [[R1]] 
15511550; 
15521551  %xsign  = ashr  <2  x i8 > %x , <i8  7 , i8  poison>
15531552  %ypos  = icmp  sgt  <2  x i8 > %y , <i8  -1 , i8  poison>
@@ -1560,11 +1559,10 @@ define <2 x i1> @same_signbit_poison_elts_signed(<2 x i8> %x, <2 x i8> %y) {
15601559
15611560define  i1  @same_signbit_wrong_type_signed (i8  %x , i32  %y ) {
15621561; CHECK-LABEL: @same_signbit_wrong_type_signed( 
1563- ; CHECK-NEXT:    [[XSIGN:%.*]] = ashr i8 [[X:%.*]], 7 
15641562; CHECK-NEXT:    [[YPOS:%.*]] = icmp sgt i32 [[Y:%.*]], -1 
1565- ; CHECK-NEXT:    [[YPOSZ :%.*]] = sext i1 [[YPOS]] to i8  
1566- ; CHECK-NEXT:    [[R :%.*]] = icmp ne i8 [[XSIGN ]], [[YPOSZ ]] 
1567- ; CHECK-NEXT:    ret i1 [[R ]] 
1563+ ; CHECK-NEXT:    [[TMP1 :%.*]] = icmp slt i8 [[X:%.*]], 0  
1564+ ; CHECK-NEXT:    [[R1 :%.*]] = xor i1 [[TMP1 ]], [[YPOS ]] 
1565+ ; CHECK-NEXT:    ret i1 [[R1 ]] 
15681566; 
15691567  %xsign  = ashr  i8  %x , 7 
15701568  %ypos  = icmp  sgt  i32  %y , -1 
@@ -1592,10 +1590,10 @@ define i1 @exactly_one_set_signbit_wrong_shamt_signed(i8 %x, i8 %y) {
15921590
15931591define  i1  @slt_zero_ult_i1 (i32  %a , i1  %b ) {
15941592; CHECK-LABEL: @slt_zero_ult_i1( 
1595- ; CHECK-NEXT:    [[CONV :%.*]] = zext i1 [[B :%.*]] to i32  
1596- ; CHECK-NEXT:    [[CMP1 :%.*]] = lshr i32  [[A :%.*]], 31  
1597- ; CHECK-NEXT:    [[CMP2 :%.*]] = icmp ugt i32 [[CMP1 ]], [[CONV ]] 
1598- ; CHECK-NEXT:    ret i1 [[CMP2 ]] 
1593+ ; CHECK-NEXT:    [[TMP1 :%.*]] = icmp slt i32 [[A :%.*]], 0  
1594+ ; CHECK-NEXT:    [[TMP2 :%.*]] = xor i1  [[B :%.*]], true  
1595+ ; CHECK-NEXT:    [[CMP21 :%.*]] = and i1 [[TMP1 ]], [[TMP2 ]] 
1596+ ; CHECK-NEXT:    ret i1 [[CMP21 ]] 
15991597; 
16001598  %conv  = zext  i1  %b  to  i32 
16011599  %cmp1  = lshr  i32  %a , 31 
@@ -1631,10 +1629,10 @@ define i1 @slt_zero_ult_i1_fail2(i32 %a, i1 %b) {
16311629
16321630define  i1  @slt_zero_slt_i1_fail (i32  %a , i1  %b ) {
16331631; CHECK-LABEL: @slt_zero_slt_i1_fail( 
1634- ; CHECK-NEXT:    [[CONV :%.*]] = zext i1 [[B :%.*]] to i32  
1635- ; CHECK-NEXT:    [[CMP1 :%.*]] = lshr i32  [[A :%.*]], 31  
1636- ; CHECK-NEXT:    [[CMP2 :%.*]] = icmp ugt i32 [[CMP1 ]], [[CONV ]] 
1637- ; CHECK-NEXT:    ret i1 [[CMP2 ]] 
1632+ ; CHECK-NEXT:    [[TMP1 :%.*]] = icmp slt i32 [[A :%.*]], 0  
1633+ ; CHECK-NEXT:    [[TMP2 :%.*]] = xor i1  [[B :%.*]], true  
1634+ ; CHECK-NEXT:    [[CMP21 :%.*]] = and i1 [[TMP1 ]], [[TMP2 ]] 
1635+ ; CHECK-NEXT:    ret i1 [[CMP21 ]] 
16381636; 
16391637  %conv  = zext  i1  %b  to  i32 
16401638  %cmp1  = lshr  i32  %a , 31 
@@ -1644,10 +1642,9 @@ define i1 @slt_zero_slt_i1_fail(i32 %a, i1 %b) {
16441642
16451643define  i1  @slt_zero_eq_i1_signed (i32  %a , i1  %b ) {
16461644; CHECK-LABEL: @slt_zero_eq_i1_signed( 
1647- ; CHECK-NEXT:    [[CONV:%.*]] = sext i1 [[B:%.*]] to i32 
1648- ; CHECK-NEXT:    [[CMP1:%.*]] = ashr i32 [[A:%.*]], 31 
1649- ; CHECK-NEXT:    [[CMP2:%.*]] = icmp eq i32 [[CMP1]], [[CONV]] 
1650- ; CHECK-NEXT:    ret i1 [[CMP2]] 
1645+ ; CHECK-NEXT:    [[TMP1:%.*]] = icmp sgt i32 [[A:%.*]], -1 
1646+ ; CHECK-NEXT:    [[CMP21:%.*]] = xor i1 [[TMP1]], [[B:%.*]] 
1647+ ; CHECK-NEXT:    ret i1 [[CMP21]] 
16511648; 
16521649  %conv  = sext  i1  %b  to  i32 
16531650  %cmp1  = ashr  i32  %a , 31 
0 commit comments