[InstCombine] Add a few cases for OR we fail to optimize due to missing commuted patterns checks.

llvm-svn: 299725
This commit is contained in:
Craig Topper 2017-04-06 23:00:22 +00:00
parent 60b5a1cd17
commit 740fe1a6eb
1 changed files with 45 additions and 0 deletions

View File

@ -797,3 +797,48 @@ final:
%value = or <2 x i32> %A, <i32 123, i32 333> %value = or <2 x i32> %A, <i32 123, i32 333>
ret <2 x i32> %value ret <2 x i32> %value
} }
define i8 @test51(i8 %a, i8 %b, i8 %c) {
; CHECK-LABEL: @test51(
; CHECK-NEXT: [[W:%.*]] = mul i8 [[B:%.*]], [[C:%.*]]
; CHECK-NEXT: [[Z:%.*]] = xor i8 [[A:%.*]], -1
; CHECK-NEXT: [[Y:%.*]] = and i8 [[W]], [[Z]]
; CHECK-NEXT: [[X:%.*]] = or i8 [[Y]], [[A]]
; CHECK-NEXT: ret i8 [[X]]
;
%w = mul i8 %b, %c
%z = xor i8 %a, -1
%y = and i8 %w, %z
%x = or i8 %y, %a
ret i8 %x
}
define i8 @test52(i8 %a, i8 %b, i8 %c) {
; CHECK-LABEL: @test52(
; CHECK-NEXT: [[W:%.*]] = mul i8 [[B:%.*]], [[C:%.*]]
; CHECK-NEXT: [[Z:%.*]] = xor i8 [[W]], -1
; CHECK-NEXT: [[Y:%.*]] = and i8 [[Z]], [[A:%.*]]
; CHECK-NEXT: [[X:%.*]] = or i8 [[W]], [[Y]]
; CHECK-NEXT: ret i8 [[X]]
;
%w = mul i8 %b, %c
%z = xor i8 %w, -1
%y = and i8 %z, %a
%x = or i8 %w, %y
ret i8 %x
}
define i8 @test53(i8 %a, i8 %b, i8 %c) {
; CHECK-LABEL: @test53(
; CHECK-NEXT: [[W:%.*]] = mul i8 [[B:%.*]], [[C:%.*]]
; CHECK-NEXT: [[Z:%.*]] = xor i8 [[W]], -1
; CHECK-NEXT: [[Y:%.*]] = and i8 [[Z]], [[A:%.*]]
; CHECK-NEXT: [[X:%.*]] = or i8 [[W]], [[Y]]
; CHECK-NEXT: ret i8 [[X]]
;
%w = mul i8 %b, %c
%z = xor i8 %w, -1
%y = and i8 %z, %a
%x = or i8 %w, %y
ret i8 %x
}