Skip to content

Commit abb1953

Browse files
committed
[InstComb] Pre-commit (l|a)shr-[x]or test
1 parent 2108c62 commit abb1953

File tree

1 file changed

+102
-0
lines changed

1 file changed

+102
-0
lines changed

llvm/test/Transforms/InstCombine/shift-logic.ll

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@ define i32 @ashr_xor(i32 %x, i32 %py) {
186186
ret i32 %sh1
187187
}
188188

189+
189190
define i32 @shr_mismatch_xor(i32 %x, i32 %y) {
190191
; CHECK-LABEL: @shr_mismatch_xor(
191192
; CHECK-NEXT: [[SH0:%.*]] = ashr i32 [[X:%.*]], 5
@@ -546,3 +547,104 @@ define <2 x i64> @lshr_sub_poison(<2 x i64> %x, <2 x i64> %py) {
546547
%sh1 = lshr <2 x i64> %r, <i64 7, i64 poison>
547548
ret <2 x i64> %sh1
548549
}
550+
551+
define i32 @ashr_xor_operand_match(i32 %x, i32 %y) {
552+
; CHECK-LABEL: @ashr_xor_operand_match(
553+
; CHECK-NEXT: [[R:%.*]] = xor i32 [[X:%.*]], [[Y:%.*]]
554+
; CHECK-NEXT: [[RET:%.*]] = ashr i32 [[R]], [[X]]
555+
; CHECK-NEXT: ret i32 [[RET]]
556+
;
557+
%r = xor i32 %x, %y
558+
%ret = ashr i32 %r, %x
559+
ret i32 %ret
560+
}
561+
562+
define i32 @ashr_xor_operand_mismtach(i32 %x, i32 %y) {
563+
; CHECK-LABEL: @ashr_xor_operand_mismtach(
564+
; CHECK-NEXT: [[R:%.*]] = xor i32 [[X:%.*]], [[Y:%.*]]
565+
; CHECK-NEXT: [[RET:%.*]] = ashr i32 [[R]], [[Y]]
566+
; CHECK-NEXT: ret i32 [[RET]]
567+
;
568+
%r = xor i32 %x, %y
569+
%ret = ashr i32 %r, %y
570+
ret i32 %ret
571+
}
572+
573+
define i32 @lshr_xor_operand_match(i32 %x, i32 %y) {
574+
; CHECK-LABEL: @lshr_xor_operand_match(
575+
; CHECK-NEXT: [[R:%.*]] = xor i32 [[X:%.*]], [[Y:%.*]]
576+
; CHECK-NEXT: [[RET:%.*]] = lshr i32 [[R]], [[X]]
577+
; CHECK-NEXT: ret i32 [[RET]]
578+
;
579+
%r = xor i32 %x, %y
580+
%ret = lshr i32 %r, %x
581+
ret i32 %ret
582+
}
583+
584+
define i32 @lshr_xor_operand_mismtach(i32 %x, i32 %y) {
585+
; CHECK-LABEL: @lshr_xor_operand_mismtach(
586+
; CHECK-NEXT: [[R:%.*]] = xor i32 [[X:%.*]], [[Y:%.*]]
587+
; CHECK-NEXT: [[RET:%.*]] = lshr i32 [[R]], [[Y]]
588+
; CHECK-NEXT: ret i32 [[RET]]
589+
;
590+
%r = xor i32 %x, %y
591+
%ret = lshr i32 %r, %y
592+
ret i32 %ret
593+
}
594+
595+
define i32 @ashr_or_operand_match(i32 %x, i32 %y) {
596+
; CHECK-LABEL: @ashr_or_operand_match(
597+
; CHECK-NEXT: [[R:%.*]] = or i32 [[X:%.*]], [[Y:%.*]]
598+
; CHECK-NEXT: [[RET:%.*]] = ashr i32 [[R]], [[X]]
599+
; CHECK-NEXT: ret i32 [[RET]]
600+
;
601+
%r = or i32 %x, %y
602+
%ret = ashr i32 %r, %x
603+
ret i32 %ret
604+
}
605+
606+
define i32 @ashr_or_operand_mismtach(i32 %x, i32 %y) {
607+
; CHECK-LABEL: @ashr_or_operand_mismtach(
608+
; CHECK-NEXT: [[R:%.*]] = or i32 [[X:%.*]], [[Y:%.*]]
609+
; CHECK-NEXT: [[RET:%.*]] = ashr i32 [[R]], [[Y]]
610+
; CHECK-NEXT: ret i32 [[RET]]
611+
;
612+
%r = or i32 %x, %y
613+
%ret = ashr i32 %r, %y
614+
ret i32 %ret
615+
}
616+
617+
define i32 @lshr_or_operand_match(i32 %x, i32 %y) {
618+
; CHECK-LABEL: @lshr_or_operand_match(
619+
; CHECK-NEXT: [[R:%.*]] = or i32 [[X:%.*]], [[Y:%.*]]
620+
; CHECK-NEXT: [[RET:%.*]] = lshr i32 [[R]], [[X]]
621+
; CHECK-NEXT: ret i32 [[RET]]
622+
;
623+
%r = or i32 %x, %y
624+
%ret = lshr i32 %r, %x
625+
ret i32 %ret
626+
}
627+
628+
define i32 @lshr_or_operand_mismtach(i32 %x, i32 %y) {
629+
; CHECK-LABEL: @lshr_or_operand_mismtach(
630+
; CHECK-NEXT: [[R:%.*]] = or i32 [[X:%.*]], [[Y:%.*]]
631+
; CHECK-NEXT: [[RET:%.*]] = lshr i32 [[R]], [[Y]]
632+
; CHECK-NEXT: ret i32 [[RET]]
633+
;
634+
%r = or i32 %x, %y
635+
%ret = lshr i32 %r, %y
636+
ret i32 %ret
637+
}
638+
639+
define i32 @ashr_xor_operand_match_multiuse(i32 %x, i32 %y) {
640+
; CHECK-LABEL: @ashr_xor_operand_match_multiuse(
641+
; CHECK-NEXT: [[R:%.*]] = xor i32 [[X:%.*]], [[Y:%.*]]
642+
; CHECK-NEXT: [[Q:%.*]] = ashr i32 [[R]], [[X]]
643+
; CHECK-NEXT: [[RET:%.*]] = xor i32 [[R]], [[Q]]
644+
; CHECK-NEXT: ret i32 [[RET]]
645+
;
646+
%r = xor i32 %x, %y
647+
%q = ashr i32 %r, %x
648+
%ret = xor i32 %r, %q
649+
ret i32 %ret
650+
}

0 commit comments

Comments
 (0)