mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
fix PR6195, a bug constant folding scalar -> vector compares.
llvm-svn: 94997
This commit is contained in:
parent
1483e87700
commit
18e6b4eb6b
@ -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);
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user