diff options
Diffstat (limited to 'test/Transforms/InstCombine/or-xor.ll')
-rw-r--r-- | test/Transforms/InstCombine/or-xor.ll | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/test/Transforms/InstCombine/or-xor.ll b/test/Transforms/InstCombine/or-xor.ll index ec5b71656a476..f2bc290d79a45 100644 --- a/test/Transforms/InstCombine/or-xor.ll +++ b/test/Transforms/InstCombine/or-xor.ll @@ -230,3 +230,73 @@ define i32 @test16(i32 %a, i32 %b) { %xor = or i32 %and1, %and2 ret i32 %xor } + +define i8 @not_or(i8 %x) { +; CHECK-LABEL: @not_or( +; CHECK-NEXT: [[NOTX:%.*]] = or i8 %x, 7 +; CHECK-NEXT: [[OR:%.*]] = xor i8 [[NOTX]], -8 +; CHECK-NEXT: ret i8 [[OR]] +; + %notx = xor i8 %x, -1 + %or = or i8 %notx, 7 + ret i8 %or +} + +define i8 @not_or_xor(i8 %x) { +; CHECK-LABEL: @not_or_xor( +; CHECK-NEXT: [[NOTX:%.*]] = or i8 %x, 7 +; CHECK-NEXT: [[XOR:%.*]] = xor i8 [[NOTX]], -12 +; CHECK-NEXT: ret i8 [[XOR]] +; + %notx = xor i8 %x, -1 + %or = or i8 %notx, 7 + %xor = xor i8 %or, 12 + ret i8 %xor +} + +define i8 @xor_or(i8 %x) { +; CHECK-LABEL: @xor_or( +; CHECK-NEXT: [[XOR:%.*]] = or i8 %x, 7 +; CHECK-NEXT: [[OR:%.*]] = xor i8 [[XOR]], 32 +; CHECK-NEXT: ret i8 [[OR]] +; + %xor = xor i8 %x, 32 + %or = or i8 %xor, 7 + ret i8 %or +} + +define i8 @xor_or2(i8 %x) { +; CHECK-LABEL: @xor_or2( +; CHECK-NEXT: [[XOR:%.*]] = or i8 %x, 7 +; CHECK-NEXT: [[OR:%.*]] = xor i8 [[XOR]], 32 +; CHECK-NEXT: ret i8 [[OR]] +; + %xor = xor i8 %x, 33 + %or = or i8 %xor, 7 + ret i8 %or +} + +define i8 @xor_or_xor(i8 %x) { +; CHECK-LABEL: @xor_or_xor( +; CHECK-NEXT: [[XOR1:%.*]] = or i8 %x, 7 +; CHECK-NEXT: [[XOR2:%.*]] = xor i8 [[XOR1]], 44 +; CHECK-NEXT: ret i8 [[XOR2]] +; + %xor1 = xor i8 %x, 33 + %or = or i8 %xor1, 7 + %xor2 = xor i8 %or, 12 + ret i8 %xor2 +} + +define i8 @or_xor_or(i8 %x) { +; CHECK-LABEL: @or_xor_or( +; CHECK-NEXT: [[XOR:%.*]] = or i8 %x, 39 +; CHECK-NEXT: [[OR2:%.*]] = xor i8 [[XOR]], 8 +; CHECK-NEXT: ret i8 [[OR2]] +; + %or1 = or i8 %x, 33 + %xor = xor i8 %or1, 12 + %or2 = or i8 %xor, 7 + ret i8 %or2 +} + |