Fix Transforms/ScalarRepl/union-pointer.ll
authorChris Lattner <sabre@nondot.org>
Wed, 11 Apr 2007 15:45:25 +0000 (15:45 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 11 Apr 2007 15:45:25 +0000 (15:45 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35906 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/ScalarReplAggregates.cpp

index ad34012c45fb6880a3306cc62364e52c9f18f825..057bc6f5c9b88fb01155e88ede742bb6988605bb 100644 (file)
@@ -1002,6 +1002,11 @@ void SROA::ConvertUsesToScalar(Value *Ptr, AllocaInst *NewAI, unsigned Offset) {
                                      ConstantInt::get(Type::Int32Ty, Elt),
                                      "tmp", SI);
         }
+      } else if (isa<PointerType>(AllocaType)) {
+        // If the alloca type is a pointer, then all the elements must be
+        // pointers.
+        if (SV->getType() != AllocaType)
+          SV = new BitCastInst(SV, AllocaType, SV->getName(), SI);
       } else {
         Value *Old = new LoadInst(NewAI, NewAI->getName()+".in", SI);
 
@@ -1013,12 +1018,8 @@ void SROA::ConvertUsesToScalar(Value *Ptr, AllocaInst *NewAI, unsigned Offset) {
         if (SV->getType()->isFloatingPoint())
           SV = new BitCastInst(SV, IntegerType::get(SrcWidth),
                                SV->getName(), SI);
-        else if (isa<PointerType>(SV->getType())) {
-          if (isa<PointerType>(AllocaType))
-            SV = new BitCastInst(SV, AllocaType, SV->getName(), SI);
-          else
-            SV = new PtrToIntInst(SV, TD.getIntPtrType(), SV->getName(), SI);
-        }
+        else if (isa<PointerType>(SV->getType()))
+          SV = new PtrToIntInst(SV, TD.getIntPtrType(), SV->getName(), SI);
                  
         // Always zero extend the value if needed.
         if (SV->getType() != AllocaType)