Index: llvm/test/Transforms/InstCombine/and-or-not.ll =================================================================== --- llvm/test/Transforms/InstCombine/and-or-not.ll +++ llvm/test/Transforms/InstCombine/and-or-not.ll @@ -763,11 +763,7 @@ define i4 @simplify_and_common_op_use2(i4 %x, i4 %y, i4 %z) { ; CHECK-LABEL: @simplify_and_common_op_use2( ; CHECK-NEXT: call void @use(i4 [[Y:%.*]]) -; CHECK-NEXT: [[TMP1:%.*]] = or i4 [[X:%.*]], [[Z:%.*]] -; CHECK-NEXT: [[XYZ:%.*]] = or i4 [[TMP1]], [[Y]] -; CHECK-NEXT: [[NOT_XYZ:%.*]] = xor i4 [[XYZ]], -1 -; CHECK-NEXT: [[R:%.*]] = and i4 [[NOT_XYZ]], [[X]] -; CHECK-NEXT: ret i4 [[R]] +; CHECK-NEXT: ret i4 0 ; %xy = or i4 %y, %x call void @use(i4 %y) @@ -781,12 +777,8 @@ define i4 @simplify_and_common_op_use3(i4 %x, i4 %y, i4 %z) { ; CHECK-LABEL: @simplify_and_common_op_use3( -; CHECK-NEXT: [[XY:%.*]] = or i4 [[X:%.*]], [[Y:%.*]] -; CHECK-NEXT: [[XYZ:%.*]] = or i4 [[XY]], [[Z:%.*]] -; CHECK-NEXT: call void @use(i4 [[Z]]) -; CHECK-NEXT: [[NOT_XYZ:%.*]] = xor i4 [[XYZ]], -1 -; CHECK-NEXT: [[R:%.*]] = and i4 [[NOT_XYZ]], [[X]] -; CHECK-NEXT: ret i4 [[R]] +; CHECK-NEXT: call void @use(i4 [[Z:%.*]]) +; CHECK-NEXT: ret i4 0 ; %xy = or i4 %x, %y %xyz = or i4 %xy, %z Index: llvm/test/Transforms/InstCombine/or-xor.ll =================================================================== --- llvm/test/Transforms/InstCombine/or-xor.ll +++ llvm/test/Transforms/InstCombine/or-xor.ll @@ -231,11 +231,7 @@ define i32 @test10(i32 %A, i32 %B) { ; CHECK-LABEL: @test10( -; CHECK-NEXT: [[XOR1:%.*]] = xor i32 [[B:%.*]], [[A:%.*]] -; CHECK-NEXT: [[TMP1:%.*]] = xor i32 [[A]], [[B]] -; CHECK-NEXT: [[XOR2:%.*]] = xor i32 [[TMP1]], -1 -; CHECK-NEXT: [[OR:%.*]] = or i32 [[XOR1]], [[XOR2]] -; CHECK-NEXT: ret i32 [[OR]] +; CHECK-NEXT: ret i32 -1 ; %xor1 = xor i32 %B, %A %not = xor i32 %A, -1 @@ -246,11 +242,7 @@ define i32 @test10_commuted(i32 %A, i32 %B) { ; CHECK-LABEL: @test10_commuted( -; CHECK-NEXT: [[XOR1:%.*]] = xor i32 [[B:%.*]], [[A:%.*]] -; CHECK-NEXT: [[TMP1:%.*]] = xor i32 [[A]], [[B]] -; CHECK-NEXT: [[XOR2:%.*]] = xor i32 [[TMP1]], -1 -; CHECK-NEXT: [[OR:%.*]] = or i32 [[XOR1]], [[XOR2]] -; CHECK-NEXT: ret i32 [[OR]] +; CHECK-NEXT: ret i32 -1 ; %xor1 = xor i32 %B, %A %not = xor i32 %A, -1 @@ -290,11 +282,7 @@ ; (A ^ B) | ~(A ^ B) --> -1 define i32 @test10_canonical(i32 %A, i32 %B) { ; CHECK-LABEL: @test10_canonical( -; CHECK-NEXT: [[XOR1:%.*]] = xor i32 [[B:%.*]], [[A:%.*]] -; CHECK-NEXT: [[XOR2:%.*]] = xor i32 [[A]], [[B]] -; CHECK-NEXT: [[NOT:%.*]] = xor i32 [[XOR2]], -1 -; CHECK-NEXT: [[OR:%.*]] = or i32 [[XOR1]], [[NOT]] -; CHECK-NEXT: ret i32 [[OR]] +; CHECK-NEXT: ret i32 -1 ; %xor1 = xor i32 %B, %A %xor2 = xor i32 %A, %B Index: llvm/test/Transforms/InstCombine/xor2.ll =================================================================== --- llvm/test/Transforms/InstCombine/xor2.ll +++ llvm/test/Transforms/InstCombine/xor2.ll @@ -171,11 +171,7 @@ define i32 @test11(i32 %A, i32 %B) { ; CHECK-LABEL: @test11( -; CHECK-NEXT: [[XOR1:%.*]] = xor i32 [[B:%.*]], [[A:%.*]] -; CHECK-NEXT: [[TMP1:%.*]] = xor i32 [[A]], [[B]] -; CHECK-NEXT: [[XOR2:%.*]] = xor i32 [[TMP1]], -1 -; CHECK-NEXT: [[AND:%.*]] = and i32 [[XOR1]], [[XOR2]] -; CHECK-NEXT: ret i32 [[AND]] +; CHECK-NEXT: ret i32 0 ; %xor1 = xor i32 %B, %A %not = xor i32 %A, -1 @@ -186,11 +182,7 @@ define i32 @test11b(i32 %A, i32 %B) { ; CHECK-LABEL: @test11b( -; CHECK-NEXT: [[XOR1:%.*]] = xor i32 [[B:%.*]], [[A:%.*]] -; CHECK-NEXT: [[TMP1:%.*]] = xor i32 [[A]], [[B]] -; CHECK-NEXT: [[XOR2:%.*]] = xor i32 [[TMP1]], -1 -; CHECK-NEXT: [[AND:%.*]] = and i32 [[XOR1]], [[XOR2]] -; CHECK-NEXT: ret i32 [[AND]] +; CHECK-NEXT: ret i32 0 ; %xor1 = xor i32 %B, %A %not = xor i32 %A, -1 @@ -201,11 +193,7 @@ define i32 @test11c(i32 %A, i32 %B) { ; CHECK-LABEL: @test11c( -; CHECK-NEXT: [[XOR1:%.*]] = xor i32 [[A:%.*]], [[B:%.*]] -; CHECK-NEXT: [[TMP1:%.*]] = xor i32 [[A]], [[B]] -; CHECK-NEXT: [[XOR2:%.*]] = xor i32 [[TMP1]], -1 -; CHECK-NEXT: [[AND:%.*]] = and i32 [[XOR1]], [[XOR2]] -; CHECK-NEXT: ret i32 [[AND]] +; CHECK-NEXT: ret i32 0 ; %xor1 = xor i32 %A, %B %not = xor i32 %A, -1 @@ -216,11 +204,7 @@ define i32 @test11d(i32 %A, i32 %B) { ; CHECK-LABEL: @test11d( -; CHECK-NEXT: [[XOR1:%.*]] = xor i32 [[A:%.*]], [[B:%.*]] -; CHECK-NEXT: [[TMP1:%.*]] = xor i32 [[A]], [[B]] -; CHECK-NEXT: [[XOR2:%.*]] = xor i32 [[TMP1]], -1 -; CHECK-NEXT: [[AND:%.*]] = and i32 [[XOR1]], [[XOR2]] -; CHECK-NEXT: ret i32 [[AND]] +; CHECK-NEXT: ret i32 0 ; %xor1 = xor i32 %A, %B %not = xor i32 %A, -1 @@ -231,12 +215,7 @@ define i32 @test11e(i32 %A, i32 %B, i32 %C) { ; CHECK-LABEL: @test11e( -; CHECK-NEXT: [[FORCE:%.*]] = mul i32 [[B:%.*]], [[C:%.*]] -; CHECK-NEXT: [[XOR1:%.*]] = xor i32 [[FORCE]], [[A:%.*]] -; CHECK-NEXT: [[TMP1:%.*]] = xor i32 [[FORCE]], [[A]] -; CHECK-NEXT: [[XOR2:%.*]] = xor i32 [[TMP1]], -1 -; CHECK-NEXT: [[AND:%.*]] = and i32 [[XOR1]], [[XOR2]] -; CHECK-NEXT: ret i32 [[AND]] +; CHECK-NEXT: ret i32 0 ; %force = mul i32 %B, %C %xor1 = xor i32 %force, %A @@ -248,12 +227,7 @@ define i32 @test11f(i32 %A, i32 %B, i32 %C) { ; CHECK-LABEL: @test11f( -; CHECK-NEXT: [[FORCE:%.*]] = mul i32 [[B:%.*]], [[C:%.*]] -; CHECK-NEXT: [[XOR1:%.*]] = xor i32 [[FORCE]], [[A:%.*]] -; CHECK-NEXT: [[TMP1:%.*]] = xor i32 [[FORCE]], [[A]] -; CHECK-NEXT: [[XOR2:%.*]] = xor i32 [[TMP1]], -1 -; CHECK-NEXT: [[AND:%.*]] = and i32 [[XOR1]], [[XOR2]] -; CHECK-NEXT: ret i32 [[AND]] +; CHECK-NEXT: ret i32 0 ; %force = mul i32 %B, %C %xor1 = xor i32 %force, %A