diff options
Diffstat (limited to 'test/Transforms/InstCombine/or.ll')
-rw-r--r-- | test/Transforms/InstCombine/or.ll | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/test/Transforms/InstCombine/or.ll b/test/Transforms/InstCombine/or.ll index 1cd897e..23dad21 100644 --- a/test/Transforms/InstCombine/or.ll +++ b/test/Transforms/InstCombine/or.ll @@ -408,3 +408,101 @@ define i32 @test38(i32* %xp, i32 %y) { %or = or i32 %x, %sext ret i32 %or } + +define i32 @test39(i32 %a, i32 %b) { +; CHECK-LABEL: test39( +; CHECK-NEXT: %or = or i32 %a, %b + %xor = xor i32 %a, -1 + %and = and i32 %xor, %b + %or = or i32 %and, %a + ret i32 %or +} + +define i32 @test40(i32 %a, i32 %b) { +; CHECK-LABEL: test40( +; CHECK-NEXT: %1 = xor i32 %a, -1 +; CHECK-NEXT: %or = or i32 %1, %b + %and = and i32 %a, %b + %xor = xor i32 %a, -1 + %or = or i32 %and, %xor + ret i32 %or +} + +define i32 @test41(i32 %a, i32 %b) { +; CHECK-LABEL: test41( +; CHECK-NEXT: %1 = xor i32 %a, -1 +; CHECK-NEXT: %or = xor i32 %1, %b + %and = and i32 %a, %b + %nega = xor i32 %a, -1 + %xor = xor i32 %nega, %b + %or = or i32 %and, %xor + ret i32 %or +} + +define i32 @test42(i32 %a, i32 %b) { +; CHECK-LABEL: test42( +; CHECK-NEXT: %1 = xor i32 %a, -1 +; CHECK-NEXT: %or = xor i32 %1, %b + %nega = xor i32 %a, -1 + %xor = xor i32 %nega, %b + %and = and i32 %a, %b + %or = or i32 %xor, %and + ret i32 %or +} + +define i32 @test43(i32 %a, i32 %b) { +; CHECK-LABEL: test43( +; CHECK-NEXT: %or = xor i32 %a, %b + %neg = xor i32 %b, -1 + %and = and i32 %a, %neg + %xor = xor i32 %a, %b + %or = or i32 %and, %xor + ret i32 %or +} + +define i32 @test44(i32 %a, i32 %b) { +; CHECK-LABEL: test44( +; CHECK-NEXT: %or = xor i32 %a, %b + %xor = xor i32 %a, %b + %neg = xor i32 %b, -1 + %and = and i32 %a, %neg + %or = or i32 %xor, %and + ret i32 %or +} + +define i32 @test45(i32 %x, i32 %y, i32 %z) { +; CHECK-LABEL: test45( +; CHECK-NEXT: %1 = and i32 %x, %z +; CHECK-NEXT: %or1 = or i32 %1, %y +; CHECK-NEXT: ret i32 %or1 + %or = or i32 %y, %z + %and = and i32 %x, %or + %or1 = or i32 %and, %y + ret i32 %or1 +} + +define i1 @test46(i8 signext %c) { + %c.off = add i8 %c, -97 + %cmp1 = icmp ult i8 %c.off, 26 + %c.off17 = add i8 %c, -65 + %cmp2 = icmp ult i8 %c.off17, 26 + %or = or i1 %cmp1, %cmp2 + ret i1 %or +; CHECK-LABEL: @test46( +; CHECK-NEXT: and i8 %c, -33 +; CHECK-NEXT: add i8 %1, -65 +; CHECK-NEXT: icmp ult i8 %2, 26 +} + +define i1 @test47(i8 signext %c) { + %c.off = add i8 %c, -65 + %cmp1 = icmp ule i8 %c.off, 26 + %c.off17 = add i8 %c, -97 + %cmp2 = icmp ule i8 %c.off17, 26 + %or = or i1 %cmp1, %cmp2 + ret i1 %or +; CHECK-LABEL: @test47( +; CHECK-NEXT: and i8 %c, -33 +; CHECK-NEXT: add i8 %1, -65 +; CHECK-NEXT: icmp ult i8 %2, 27 +} |