@@ -485,10 +485,13 @@ define i32 @unrelated_ops1(i32 %in, i32 %in2) {
485485
486486define i32 @unrelated_ops2 (i32 %in , i32 %in2 , i32 %in3 ) {
487487; CHECK-LABEL: @unrelated_ops2(
488- ; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[IN:%.*]], 15
488+ ; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[IN:%.*]], 3
489489; CHECK-NEXT: [[TMP2:%.*]] = mul nuw nsw i32 [[TMP1]], 72
490- ; CHECK-NEXT: [[TMP3:%.*]] = or disjoint i32 [[IN3:%.*]], [[IN2:%.*]]
491- ; CHECK-NEXT: [[OUT:%.*]] = or disjoint i32 [[TMP3]], [[TMP2]]
490+ ; CHECK-NEXT: [[TEMP3:%.*]] = or disjoint i32 [[TMP2]], [[IN4:%.*]]
491+ ; CHECK-NEXT: [[AND1:%.*]] = and i32 [[IN]], 12
492+ ; CHECK-NEXT: [[IN2:%.*]] = mul nuw nsw i32 [[AND1]], 72
493+ ; CHECK-NEXT: [[TMP3:%.*]] = or disjoint i32 [[IN3:%.*]], [[IN2]]
494+ ; CHECK-NEXT: [[OUT:%.*]] = or disjoint i32 [[TEMP3]], [[TMP3]]
492495; CHECK-NEXT: ret i32 [[OUT]]
493496;
494497 %and0 = and i32 %in , 3
@@ -503,10 +506,14 @@ define i32 @unrelated_ops2(i32 %in, i32 %in2, i32 %in3) {
503506
504507define i32 @unrelated_ops3 (i32 %in , i32 %in2 , i32 %in3 ) {
505508; CHECK-LABEL: @unrelated_ops3(
506- ; CHECK-NEXT: [[TMP2:%.*]] = and i32 [[IN:%.*]], 14
509+ ; CHECK-NEXT: [[AND0:%.*]] = and i32 [[IN:%.*]], 2
510+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[AND0]], 0
511+ ; CHECK-NEXT: [[TEMP:%.*]] = select i1 [[CMP]], i32 0, i32 144
512+ ; CHECK-NEXT: [[TEMP3:%.*]] = or disjoint i32 [[TEMP]], [[IN3:%.*]]
513+ ; CHECK-NEXT: [[TMP2:%.*]] = and i32 [[IN]], 12
507514; CHECK-NEXT: [[TEMP2:%.*]] = mul nuw nsw i32 [[TMP2]], 72
508- ; CHECK-NEXT: [[TMP3 :%.*]] = or disjoint i32 [[IN3 :%.*]], [[IN2:%.* ]]
509- ; CHECK-NEXT: [[OUT:%.*]] = or disjoint i32 [[TMP3 ]], [[TEMP2 ]]
515+ ; CHECK-NEXT: [[TEMP4 :%.*]] = or disjoint i32 [[IN2 :%.*]], [[TEMP2 ]]
516+ ; CHECK-NEXT: [[OUT:%.*]] = or disjoint i32 [[TEMP3 ]], [[TEMP4 ]]
510517; CHECK-NEXT: ret i32 [[OUT]]
511518;
512519 %and0 = and i32 %in , 2
@@ -522,10 +529,14 @@ define i32 @unrelated_ops3(i32 %in, i32 %in2, i32 %in3) {
522529
523530define i32 @unrelated_ops4 (i32 %in , i32 %in2 , i32 %in3 ) {
524531; CHECK-LABEL: @unrelated_ops4(
525- ; CHECK-NEXT: [[TMP2:%.*]] = and i32 [[IN:%.*]], 14
532+ ; CHECK-NEXT: [[TMP2:%.*]] = and i32 [[IN:%.*]], 12
526533; CHECK-NEXT: [[TMP3:%.*]] = mul nuw nsw i32 [[TMP2]], 72
527- ; CHECK-NEXT: [[TMP4:%.*]] = or disjoint i32 [[IN3:%.*]], [[IN2:%.*]]
528- ; CHECK-NEXT: [[OUT:%.*]] = or disjoint i32 [[TMP4]], [[TMP3]]
534+ ; CHECK-NEXT: [[TEMP3:%.*]] = or disjoint i32 [[IN4:%.*]], [[TMP3]]
535+ ; CHECK-NEXT: [[AND1:%.*]] = and i32 [[IN]], 2
536+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[AND1]], 0
537+ ; CHECK-NEXT: [[IN3:%.*]] = select i1 [[CMP]], i32 0, i32 144
538+ ; CHECK-NEXT: [[TMP4:%.*]] = or disjoint i32 [[IN3]], [[IN2:%.*]]
539+ ; CHECK-NEXT: [[OUT:%.*]] = or disjoint i32 [[TEMP3]], [[TMP4]]
529540; CHECK-NEXT: ret i32 [[OUT]]
530541;
531542 %and0 = and i32 %in , 12
@@ -541,9 +552,14 @@ define i32 @unrelated_ops4(i32 %in, i32 %in2, i32 %in3) {
541552
542553define i32 @unrelated_ops5 (i32 %in , i32 %in2 , i32 %in3 ) {
543554; CHECK-LABEL: @unrelated_ops5(
544- ; CHECK-NEXT: [[TMP2:%.*]] = and i32 [[IN:%.*]], 6
545- ; CHECK-NEXT: [[TMP3:%.*]] = mul nuw nsw i32 [[TMP2]], 72
546- ; CHECK-NEXT: [[TMP4:%.*]] = or disjoint i32 [[IN3:%.*]], [[IN2:%.*]]
555+ ; CHECK-NEXT: [[AND0:%.*]] = and i32 [[IN:%.*]], 2
556+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[AND0]], 0
557+ ; CHECK-NEXT: [[IN3:%.*]] = select i1 [[CMP]], i32 0, i32 144
558+ ; CHECK-NEXT: [[TMP4:%.*]] = or disjoint i32 [[IN3]], [[IN2:%.*]]
559+ ; CHECK-NEXT: [[AND1:%.*]] = and i32 [[IN]], 4
560+ ; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i32 [[AND1]], 0
561+ ; CHECK-NEXT: [[TEMP2:%.*]] = select i1 [[CMP2]], i32 0, i32 288
562+ ; CHECK-NEXT: [[TMP3:%.*]] = or disjoint i32 [[IN4:%.*]], [[TEMP2]]
547563; CHECK-NEXT: [[OUT:%.*]] = or disjoint i32 [[TMP4]], [[TMP3]]
548564; CHECK-NEXT: ret i32 [[OUT]]
549565;
@@ -561,10 +577,13 @@ define i32 @unrelated_ops5(i32 %in, i32 %in2, i32 %in3) {
561577
562578define i32 @unrelated_ops6 (i32 %in , i32 %in2 , i32 %in3 ) {
563579; CHECK-LABEL: @unrelated_ops6(
564- ; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[IN:%.*]], 15
580+ ; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[IN:%.*]], 3
565581; CHECK-NEXT: [[TMP2:%.*]] = mul nuw nsw i32 [[TMP1]], 72
566- ; CHECK-NEXT: [[TMP3:%.*]] = or disjoint i32 [[IN3:%.*]], [[IN2:%.*]]
567- ; CHECK-NEXT: [[OUT:%.*]] = or disjoint i32 [[TMP3]], [[TMP2]]
582+ ; CHECK-NEXT: [[TEMP3:%.*]] = or disjoint i32 [[IN4:%.*]], [[TMP2]]
583+ ; CHECK-NEXT: [[AND1:%.*]] = and i32 [[IN]], 12
584+ ; CHECK-NEXT: [[IN2:%.*]] = mul nuw nsw i32 [[AND1]], 72
585+ ; CHECK-NEXT: [[TMP3:%.*]] = or disjoint i32 [[IN3:%.*]], [[IN2]]
586+ ; CHECK-NEXT: [[OUT:%.*]] = or disjoint i32 [[TEMP3]], [[TMP3]]
568587; CHECK-NEXT: ret i32 [[OUT]]
569588;
570589 %and0 = and i32 %in , 3
@@ -579,10 +598,13 @@ define i32 @unrelated_ops6(i32 %in, i32 %in2, i32 %in3) {
579598
580599define i32 @unrelated_ops7 (i32 %in , i32 %in2 , i32 %in3 ) {
581600; CHECK-LABEL: @unrelated_ops7(
582- ; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[IN:%.*]], 15
601+ ; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[IN:%.*]], 3
583602; CHECK-NEXT: [[TMP2:%.*]] = mul nuw nsw i32 [[TMP1]], 72
584- ; CHECK-NEXT: [[TMP3:%.*]] = or disjoint i32 [[IN3:%.*]], [[IN2:%.*]]
585- ; CHECK-NEXT: [[OUT:%.*]] = or disjoint i32 [[TMP3]], [[TMP2]]
603+ ; CHECK-NEXT: [[TEMP3:%.*]] = or disjoint i32 [[IN4:%.*]], [[TMP2]]
604+ ; CHECK-NEXT: [[AND1:%.*]] = and i32 [[IN]], 12
605+ ; CHECK-NEXT: [[IN3:%.*]] = mul nuw nsw i32 [[AND1]], 72
606+ ; CHECK-NEXT: [[TMP3:%.*]] = or disjoint i32 [[IN3]], [[IN2:%.*]]
607+ ; CHECK-NEXT: [[OUT:%.*]] = or disjoint i32 [[TEMP3]], [[TMP3]]
586608; CHECK-NEXT: ret i32 [[OUT]]
587609;
588610 %and0 = and i32 %in , 3
@@ -597,10 +619,13 @@ define i32 @unrelated_ops7(i32 %in, i32 %in2, i32 %in3) {
597619
598620define i32 @unrelated_ops8 (i32 %in , i32 %in2 , i32 %in3 ) {
599621; CHECK-LABEL: @unrelated_ops8(
600- ; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[IN:%.*]], 15
622+ ; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[IN:%.*]], 3
601623; CHECK-NEXT: [[TMP2:%.*]] = mul nuw nsw i32 [[TMP1]], 72
602- ; CHECK-NEXT: [[TMP3:%.*]] = or disjoint i32 [[IN3:%.*]], [[IN2:%.*]]
603- ; CHECK-NEXT: [[OUT:%.*]] = or disjoint i32 [[TMP3]], [[TMP2]]
624+ ; CHECK-NEXT: [[TEMP3:%.*]] = or disjoint i32 [[TMP2]], [[IN4:%.*]]
625+ ; CHECK-NEXT: [[AND1:%.*]] = and i32 [[IN]], 12
626+ ; CHECK-NEXT: [[IN3:%.*]] = mul nuw nsw i32 [[AND1]], 72
627+ ; CHECK-NEXT: [[TMP3:%.*]] = or disjoint i32 [[IN3]], [[IN2:%.*]]
628+ ; CHECK-NEXT: [[OUT:%.*]] = or disjoint i32 [[TEMP3]], [[TMP3]]
604629; CHECK-NEXT: ret i32 [[OUT]]
605630;
606631 %and0 = and i32 %in , 3
0 commit comments