Fix Transforms/ScalarRepl/2005-12-14-UnionPromoteCrash.ll, a crash on undefined
authorChris Lattner <sabre@nondot.org>
Wed, 14 Dec 2005 17:23:59 +0000 (17:23 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 14 Dec 2005 17:23:59 +0000 (17:23 +0000)
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

lib/Transforms/Scalar/ScalarReplAggregates.cpp

index 4c5e3a30b6a90eec7bee4aa4b15d1c494f0e73e4..1eff10b7b7a7a4b505682222b01c2957f1f2d2eb 100644 (file)
@@ -539,7 +539,7 @@ void SROA::ConvertUsesToScalar(Value *Ptr, AllocaInst *NewAI, unsigned Offset) {
     if (LoadInst *LI = dyn_cast<LoadInst>(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);