1; RUN: opt -S -instcombine < %s | FileCheck %s 2 3define i32 @test1(i32 %x, i32 %y) nounwind { 4 %or = or i32 %x, %y 5 %not = xor i32 %or, -1 6 %z = or i32 %x, %not 7 ret i32 %z 8; CHECK: @test1 9; CHECK-NEXT: %y.not = xor i32 %y, -1 10; CHECK-NEXT: %z = or i32 %y.not, %x 11; CHECK-NEXT: ret i32 %z 12} 13 14define i32 @test2(i32 %x, i32 %y) nounwind { 15 %or = or i32 %x, %y 16 %not = xor i32 %or, -1 17 %z = or i32 %y, %not 18 ret i32 %z 19; CHECK: @test2 20; CHECK-NEXT: %x.not = xor i32 %x, -1 21; CHECK-NEXT: %z = or i32 %x.not, %y 22; CHECK-NEXT: ret i32 %z 23} 24 25define i32 @test3(i32 %x, i32 %y) nounwind { 26 %xor = xor i32 %x, %y 27 %not = xor i32 %xor, -1 28 %z = or i32 %x, %not 29 ret i32 %z 30; CHECK: @test3 31; CHECK-NEXT: %y.not = xor i32 %y, -1 32; CHECK-NEXT: %z = or i32 %y.not, %x 33; CHECK-NEXT: ret i32 %z 34} 35 36define i32 @test4(i32 %x, i32 %y) nounwind { 37 %xor = xor i32 %x, %y 38 %not = xor i32 %xor, -1 39 %z = or i32 %y, %not 40 ret i32 %z 41; CHECK: @test4 42; CHECK-NEXT: %x.not = xor i32 %x, -1 43; CHECK-NEXT: %z = or i32 %x.not, %y 44; CHECK-NEXT: ret i32 %z 45} 46 47define i32 @test5(i32 %x, i32 %y) nounwind { 48 %and = and i32 %x, %y 49 %not = xor i32 %and, -1 50 %z = or i32 %x, %not 51 ret i32 %z 52; CHECK: @test5 53; CHECK-NEXT: ret i32 -1 54} 55 56define i32 @test6(i32 %x, i32 %y) nounwind { 57 %and = and i32 %x, %y 58 %not = xor i32 %and, -1 59 %z = or i32 %y, %not 60 ret i32 %z 61; CHECK: @test6 62; CHECK-NEXT: ret i32 -1 63} 64 65define i32 @test7(i32 %x, i32 %y) nounwind { 66 %xor = xor i32 %x, %y 67 %z = or i32 %y, %xor 68 ret i32 %z 69; CHECK: @test7 70; CHECK-NEXT: %z = or i32 %x, %y 71; CHECK-NEXT: ret i32 %z 72} 73 74define i32 @test8(i32 %x, i32 %y) nounwind { 75 %not = xor i32 %y, -1 76 %xor = xor i32 %x, %not 77 %z = or i32 %y, %xor 78 ret i32 %z 79; CHECK: @test8 80; CHECK-NEXT: %x.not = xor i32 %x, -1 81; CHECK-NEXT: %z = or i32 %x.not, %y 82; CHECK-NEXT: ret i32 %z 83} 84 85define i32 @test9(i32 %x, i32 %y) nounwind { 86 %not = xor i32 %x, -1 87 %xor = xor i32 %not, %y 88 %z = or i32 %x, %xor 89 ret i32 %z 90; CHECK: @test9 91; CHECK-NEXT: %y.not = xor i32 %y, -1 92; CHECK-NEXT: %z = or i32 %y.not, %x 93; CHECK-NEXT: ret i32 %z 94} 95