Don't bitcast from pointer-to-vector to pointer-to-array when
authorDan Gohman <gohman@apple.com>
Mon, 29 Oct 2007 20:34:35 +0000 (20:34 +0000)
committerDan Gohman <gohman@apple.com>
Mon, 29 Oct 2007 20:34:35 +0000 (20:34 +0000)
lowering load and store instructions.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43468 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/LowerPacked.cpp

index 57ba86d0ab715a4ab3fc7f7f3a300d59fd714a07..5e4d9eb89ac4125b2164a784153c807471f4d741 100644 (file)
@@ -217,15 +217,7 @@ void LowerPacked::visitLoadInst(LoadInst& LI)
    if (const VectorType* PKT = dyn_cast<VectorType>(LI.getType())) {
        // Initialization, Idx is needed for getelementptr needed later
        Value *Idx[2];
-       Idx[0] = ConstantInt::get(Type::Int32Ty,0);
-
-       ArrayType* AT = ArrayType::get(PKT->getContainedType(0),
-                                      PKT->getNumElements());
-       PointerType* APT = PointerType::get(AT);
-
-       // Cast the pointer to vector type to an equivalent array
-       Value* array = new BitCastInst(LI.getPointerOperand(), APT, 
-                                      LI.getName() + ".a", &LI);
+       Idx[0] = ConstantInt::get(Type::Int32Ty, 0);
 
        // Convert this load into num elements number of loads
        std::vector<Value*> values;
@@ -236,7 +228,7 @@ void LowerPacked::visitLoadInst(LoadInst& LI)
             Idx[1] = ConstantInt::get(Type::Int32Ty,i);
 
             // Get the pointer
-            Value* val = new GetElementPtrInst(array,
+            Value* val = new GetElementPtrInst(LI.getPointerOperand(),
                                                Idx, array_endof(Idx),
                                                LI.getName() +
                                                ".ge." + utostr(i),
@@ -316,15 +308,7 @@ void LowerPacked::visitStoreInst(StoreInst& SI)
        dyn_cast<VectorType>(SI.getOperand(0)->getType())) {
        // We will need this for getelementptr
        Value *Idx[2];
-       Idx[0] = ConstantInt::get(Type::Int32Ty,0);
-
-       ArrayType* AT = ArrayType::get(PKT->getContainedType(0),
-                                      PKT->getNumElements());
-       PointerType* APT = PointerType::get(AT);
-
-       // Cast the pointer to packed to an array of equivalent type
-       Value* array = new BitCastInst(SI.getPointerOperand(), APT, 
-                                      "store.ge.a.", &SI);
+       Idx[0] = ConstantInt::get(Type::Int32Ty, 0);
 
        std::vector<Value*>& values = getValues(SI.getOperand(0));
 
@@ -334,7 +318,7 @@ void LowerPacked::visitStoreInst(StoreInst& SI)
        for (unsigned i = 0, e = PKT->getNumElements(); i != e; ++i) {
             // Generate the indices for getelementptr
             Idx[1] = ConstantInt::get(Type::Int32Ty,i);
-            Value* val = new GetElementPtrInst(array,
+            Value* val = new GetElementPtrInst(SI.getPointerOperand(),
                                                Idx, array_endof(Idx),
                                                "store.ge." +
                                                utostr(i) + ".",