Fix PR3468: a crash when constant folding a bitcast of

i80 to x86 long double (this was presumably generated
by sroa).


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@63730 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Duncan Sands 2009-02-04 10:17:14 +00:00
parent 5caa883afc
commit a06aef6ec5
2 changed files with 12 additions and 6 deletions

View File

@ -153,12 +153,11 @@ static Constant *FoldBitCast(Constant *V, const Type *DestTy) {
// Integral -> Integral. This is a no-op because the bit widths must
// be the same. Consequently, we just fold to V.
return V;
if (DestTy->isFloatingPoint()) {
assert((DestTy == Type::DoubleTy || DestTy == Type::FloatTy) &&
"Unknown FP type!");
return ConstantFP::get(APFloat(CI->getValue()));
}
if (DestTy->isFloatingPoint())
return ConstantFP::get(APFloat(CI->getValue(),
DestTy != Type::PPC_FP128Ty));
// Otherwise, can't fold this (vector?)
return 0;
}

View File

@ -0,0 +1,7 @@
; RUN: llvm-as < %s | opt -instcombine
; PR3468
define x86_fp80 @cast() {
%tmp = bitcast i80 0 to x86_fp80 ; <x86_fp80> [#uses=1]
ret x86_fp80 %tmp
}