From: Chris Lattner Date: Wed, 14 Dec 2005 17:23:59 +0000 (+0000) Subject: Fix Transforms/ScalarRepl/2005-12-14-UnionPromoteCrash.ll, a crash on undefined X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=6860f6a01ccc71d7cad61de506e0cf8ecb8ca146;p=oota-llvm.git Fix Transforms/ScalarRepl/2005-12-14-UnionPromoteCrash.ll, a crash on undefined behavior in 126.gcc on big-endian systems. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24708 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/Scalar/ScalarReplAggregates.cpp b/lib/Transforms/Scalar/ScalarReplAggregates.cpp index 4c5e3a30b6a..1eff10b7b7a 100644 --- a/lib/Transforms/Scalar/ScalarReplAggregates.cpp +++ b/lib/Transforms/Scalar/ScalarReplAggregates.cpp @@ -539,7 +539,7 @@ void SROA::ConvertUsesToScalar(Value *Ptr, AllocaInst *NewAI, unsigned Offset) { if (LoadInst *LI = dyn_cast(User)) { // The load is a bit extract from NewAI shifted right by Offset bits. Value *NV = new LoadInst(NewAI, LI->getName(), LI); - if (Offset) + if (Offset && Offset < NV->getType()->getPrimitiveSizeInBits()) NV = new ShiftInst(Instruction::Shr, NV, ConstantUInt::get(Type::UByteTy, Offset), LI->getName(), LI); @@ -563,7 +563,7 @@ void SROA::ConvertUsesToScalar(Value *Ptr, AllocaInst *NewAI, unsigned Offset) { SV = new CastInst(SV, SV->getType()->getUnsignedVersion(), SV->getName(), SI); SV = new CastInst(SV, Old->getType(), SV->getName(), SI); - if (Offset) + if (Offset && Offset < SV->getType()->getPrimitiveSizeInBits()) SV = new ShiftInst(Instruction::Shl, SV, ConstantUInt::get(Type::UByteTy, Offset), SV->getName()+".adj", SI);