1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 02:52:53 +02:00

fix PR6195, a bug constant folding scalar -> vector compares.

llvm-svn: 94997
This commit is contained in:
Chris Lattner 2010-02-01 20:04:40 +00:00
parent 1483e87700
commit 18e6b4eb6b
2 changed files with 14 additions and 3 deletions

View File

@ -2017,10 +2017,12 @@ Constant *llvm::ConstantFoldCompareInstruction(LLVMContext &Context,
return ConstantInt::get(Type::getInt1Ty(Context), Result);
// If the right hand side is a bitcast, try using its inverse to simplify
// it by moving it to the left hand side.
// it by moving it to the left hand side. We can't do this if it would turn
// a vector compare into scalar compare of visa versa.
if (ConstantExpr *CE2 = dyn_cast<ConstantExpr>(C2)) {
if (CE2->getOpcode() == Instruction::BitCast) {
Constant *CE2Op0 = CE2->getOperand(0);
Constant *CE2Op0 = CE2->getOperand(0);
if (CE2->getOpcode() == Instruction::BitCast &&
isa<VectorType>(CE2->getType()) ==isa<VectorType>(CE2Op0->getType())){
Constant *Inverse = ConstantExpr::getBitCast(C1, CE2Op0->getType());
return ConstantExpr::getICmp(pred, Inverse, CE2Op0);
}

View File

@ -112,3 +112,12 @@ define i1 @test11(i32 %x) {
; CHECK: ret i1 true
}
; PR6195
define i1 @test12(i1 %A) {
%S = select i1 %A, i64 -4294967295, i64 8589934591
%B = icmp ne i64 bitcast (<2 x i32> <i32 1, i32 -1> to i64), %S
ret i1 %B
; CHECK: @test12
; CHECK-NEXT: %B = select i1
; CHECK-NEXT: ret i1 %B
}