Don't fold double constant to an integer if dest type not integral
Summary: I encountered this issue when constant folding during inlining tried to fold away a bitcast of a double to an x86_mmx, which is not an integral type. The test case exposes the same issue with a smaller code snippet during early CSE. Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D18528 llvm-svn: 265367
This commit is contained in:
parent
e3f558ba14
commit
f4cf1c3eb4
|
@ -191,6 +191,10 @@ static Constant *FoldBitCast(Constant *V, Type *DestTy) {
|
|||
if (FP->getType()->isPPC_FP128Ty())
|
||||
return nullptr;
|
||||
|
||||
// Make sure dest type is compatible with the folded integer constant.
|
||||
if (!DestTy->isIntegerTy())
|
||||
return nullptr;
|
||||
|
||||
return ConstantInt::get(FP->getContext(),
|
||||
FP->getValueAPF().bitcastToAPInt());
|
||||
}
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
; RUN: opt -mtriple=x86_64-- -early-cse < %s -S | FileCheck %s
|
||||
|
||||
; CHECK: @foo(x86_mmx bitcast (double 0.000000e+00 to x86_mmx))
|
||||
|
||||
define void @bar() {
|
||||
entry:
|
||||
%0 = bitcast double 0.0 to x86_mmx
|
||||
%1 = call x86_mmx @foo(x86_mmx %0)
|
||||
ret void
|
||||
}
|
||||
|
||||
declare x86_mmx @foo(x86_mmx)
|
Loading…
Reference in New Issue