diff options
author | Chris Lattner <sabre@nondot.org> | 2006-10-24 06:26:32 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2006-10-24 06:26:32 +0000 |
commit | ae5d51c9c915f93fbf9b3e644a165c96d6b0ddbd (patch) | |
tree | 00937b6610410204b10852b76294456c33af330f /lib/Transforms | |
parent | b0d6dbfd7cb514028f64ed61ff79fc4db13dc902 (diff) | |
download | external_llvm-ae5d51c9c915f93fbf9b3e644a165c96d6b0ddbd.zip external_llvm-ae5d51c9c915f93fbf9b3e644a165c96d6b0ddbd.tar.gz external_llvm-ae5d51c9c915f93fbf9b3e644a165c96d6b0ddbd.tar.bz2 |
Fix Transforms/ScalarRepl/2006-10-23-PointerUnionCrash.ll
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31151 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms')
-rw-r--r-- | lib/Transforms/Scalar/ScalarReplAggregates.cpp | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/lib/Transforms/Scalar/ScalarReplAggregates.cpp b/lib/Transforms/Scalar/ScalarReplAggregates.cpp index 496449f..ffb095a 100644 --- a/lib/Transforms/Scalar/ScalarReplAggregates.cpp +++ b/lib/Transforms/Scalar/ScalarReplAggregates.cpp @@ -611,11 +611,16 @@ void SROA::ConvertUsesToScalar(Value *Ptr, AllocaInst *NewAI, unsigned Offset) { NV = new ExtractElementInst(NV, ConstantInt::get(Type::UIntTy, Elt), "tmp", LI); } else { - assert(NV->getType()->isInteger() && "Unknown promotion!"); - if (Offset && Offset < TD.getTypeSize(NV->getType())*8) - NV = new ShiftInst(Instruction::Shr, NV, - ConstantInt::get(Type::UByteTy, Offset), - LI->getName(), LI); + if (Offset) { + assert(NV->getType()->isInteger() && "Unknown promotion!"); + if (Offset < TD.getTypeSize(NV->getType())*8) + NV = new ShiftInst(Instruction::Shr, NV, + ConstantInt::get(Type::UByteTy, Offset), + LI->getName(), LI); + } else { + assert((NV->getType()->isInteger() || + isa<PointerType>(NV->getType())) && "Unknown promotion!"); + } NV = new CastInst(NV, LI->getType(), LI->getName(), LI); } } |