@@ -501,6 +501,64 @@ define i32 @unrelated_ops2(i32 %in, i32 %in2, i32 %in3) {
501501 ret i32 %out
502502}
503503
504+ define i32 @unrelated_ops3 (i32 %in , i32 %in2 , i32 %in3 ) {
505+ ; CHECK-LABEL: @unrelated_ops3(
506+ ; CHECK-NEXT: [[TEMP3:%.*]] = or disjoint i32 [[TEMP:%.*]], [[IN3:%.*]]
507+ ; CHECK-NEXT: [[TMP2:%.*]] = and i32 [[IN:%.*]], 14
508+ ; CHECK-NEXT: [[TEMP2:%.*]] = mul nuw nsw i32 [[TMP2]], 72
509+ ; CHECK-NEXT: [[OUT:%.*]] = or disjoint i32 [[TEMP2]], [[TEMP3]]
510+ ; CHECK-NEXT: ret i32 [[OUT]]
511+ ;
512+ %1 = and i32 %in , 2
513+ %cmp = icmp eq i32 %1 , 0
514+ %temp = select i1 %cmp , i32 0 , i32 144
515+ %temp3 = or disjoint i32 %temp , %in3
516+ %2 = and i32 %in , 12
517+ %temp2 = mul nuw nsw i32 %2 , 72
518+ %temp4 = or disjoint i32 %in2 , %temp2
519+ %out = or disjoint i32 %temp3 , %temp4
520+ ret i32 %out
521+ }
522+
523+ define i32 @unrelated_ops4 (i32 %in , i32 %in2 , i32 %in3 ) {
524+ ; CHECK-LABEL: @unrelated_ops4(
525+ ; CHECK-NEXT: [[TMP1:%.*]] = or disjoint i32 [[IN2:%.*]], [[IN3:%.*]]
526+ ; CHECK-NEXT: [[TMP2:%.*]] = and i32 [[IN:%.*]], 14
527+ ; CHECK-NEXT: [[TMP3:%.*]] = mul nuw nsw i32 [[TMP2]], 72
528+ ; CHECK-NEXT: [[OUT:%.*]] = or disjoint i32 [[TMP3]], [[TMP1]]
529+ ; CHECK-NEXT: ret i32 [[OUT]]
530+ ;
531+ %1 = and i32 %in , 12
532+ %temp = mul nuw nsw i32 %1 , 72
533+ %temp3 = or disjoint i32 %in2 , %temp
534+ %2 = and i32 %in , 2
535+ %cmp = icmp eq i32 %2 , 0
536+ %temp2 = select i1 %cmp , i32 0 , i32 144
537+ %temp4 = or disjoint i32 %temp2 , %in3
538+ %out = or disjoint i32 %temp3 , %temp4
539+ ret i32 %out
540+ }
541+
542+ define i32 @unrelated_ops5 (i32 %in , i32 %in2 , i32 %in3 ) {
543+ ; CHECK-LABEL: @unrelated_ops5(
544+ ; CHECK-NEXT: [[TMP1:%.*]] = or disjoint i32 [[IN3:%.*]], [[IN2:%.*]]
545+ ; CHECK-NEXT: [[TMP2:%.*]] = and i32 [[IN:%.*]], 6
546+ ; CHECK-NEXT: [[TMP3:%.*]] = mul nuw nsw i32 [[TMP2]], 72
547+ ; CHECK-NEXT: [[OUT:%.*]] = or disjoint i32 [[TMP3]], [[TMP1]]
548+ ; CHECK-NEXT: ret i32 [[OUT]]
549+ ;
550+ %1 = and i32 %in , 2
551+ %cmp = icmp eq i32 %1 , 0
552+ %temp = select i1 %cmp , i32 0 , i32 144
553+ %temp3 = or disjoint i32 %temp , %in3
554+ %2 = and i32 %in , 4
555+ %cmp2 = icmp eq i32 %2 , 0
556+ %temp2 = select i1 %cmp2 , i32 0 , i32 288
557+ %temp4 = or disjoint i32 %in2 , %temp2
558+ %out = or disjoint i32 %temp3 , %temp4
559+ ret i32 %out
560+ }
561+
504562define i32 @unrelated_ops_nocombine (i32 %in , i32 %in2 , i32 %in3 ) {
505563; CHECK-LABEL: @unrelated_ops_nocombine(
506564; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[IN:%.*]], 3
0 commit comments