From: Dan Gohman Date: Mon, 29 Oct 2007 20:34:35 +0000 (+0000) Subject: Don't bitcast from pointer-to-vector to pointer-to-array when X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=a8cc4d3d3c71d260e454ee2c7e762b956b529091;p=oota-llvm.git Don't bitcast from pointer-to-vector to pointer-to-array when lowering load and store instructions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43468 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/Scalar/LowerPacked.cpp b/lib/Transforms/Scalar/LowerPacked.cpp index 57ba86d0ab7..5e4d9eb89ac 100644 --- a/lib/Transforms/Scalar/LowerPacked.cpp +++ b/lib/Transforms/Scalar/LowerPacked.cpp @@ -217,15 +217,7 @@ void LowerPacked::visitLoadInst(LoadInst& LI) if (const VectorType* PKT = dyn_cast(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 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(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& 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) + ".",