Skip to content

Commit 75ec1d7

Browse files
committed
Add tests for the and-icmp-sel form
Change-Id: I875b9fac4749b3f391efce47f8d3b9e2004de8c2
1 parent 495d32e commit 75ec1d7

File tree

1 file changed

+58
-0
lines changed

1 file changed

+58
-0
lines changed

llvm/test/Transforms/InstCombine/or-bitmask.ll

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
504562
define 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

Comments
 (0)