[llvm-commits] [llvm] r63652 - /llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp
Chris Lattner
sabre at nondot.org
Tue Feb 3 11:45:44 PST 2009
Author: lattner
Date: Tue Feb 3 13:45:44 2009
New Revision: 63652
URL: http://llvm.org/viewvc/llvm-project?rev=63652&view=rev
Log:
convert ConvertUsesOfLoadToScalar to use IRBuilder,
no functionality change.
Modified:
llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp
Modified: llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp?rev=63652&r1=63651&r2=63652&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp Tue Feb 3 13:45:44 2009
@@ -130,7 +130,7 @@
bool &SawVec, uint64_t Offset, unsigned AllocaSize);
void ConvertUsesToScalar(Value *Ptr, AllocaInst *NewAI, uint64_t Offset);
Value *ConvertUsesOfLoadToScalar(LoadInst *LI, AllocaInst *NewAI,
- uint64_t Offset);
+ uint64_t Offset, IRBuilder<> &Builder);
Value *ConvertScalar_InsertValue(Value *StoredVal, Value *ExistingVal,
uint64_t Offset, IRBuilder<> &Builder);
static Instruction *isOnlyCopiedFromConstantGlobal(AllocationInst *AI);
@@ -1319,24 +1319,6 @@
while (!Ptr->use_empty()) {
Instruction *User = cast<Instruction>(Ptr->use_back());
- if (LoadInst *LI = dyn_cast<LoadInst>(User)) {
- LI->replaceAllUsesWith(ConvertUsesOfLoadToScalar(LI, NewAI, Offset));
- LI->eraseFromParent();
- continue;
- }
-
- if (StoreInst *SI = dyn_cast<StoreInst>(User)) {
- assert(SI->getOperand(0) != Ptr && "Consistency error!");
-
- IRBuilder<> Builder(SI->getParent(), SI);
- Value *Old = Builder.CreateLoad(NewAI, (NewAI->getName()+".in").c_str());
- Value *New = ConvertScalar_InsertValue(SI->getOperand(0), Old, Offset,
- Builder);
- Builder.CreateStore(New, NewAI);
- SI->eraseFromParent();
- continue;
- }
-
if (BitCastInst *CI = dyn_cast<BitCastInst>(User)) {
ConvertUsesToScalar(CI, NewAI, Offset);
CI->eraseFromParent();
@@ -1353,6 +1335,25 @@
continue;
}
+ IRBuilder<> Builder(User->getParent(), User);
+
+ if (LoadInst *LI = dyn_cast<LoadInst>(User)) {
+ Value *LoadVal = ConvertUsesOfLoadToScalar(LI, NewAI, Offset, Builder);
+ LI->replaceAllUsesWith(LoadVal);
+ LI->eraseFromParent();
+ continue;
+ }
+
+ if (StoreInst *SI = dyn_cast<StoreInst>(User)) {
+ assert(SI->getOperand(0) != Ptr && "Consistency error!");
+ Value *Old = Builder.CreateLoad(NewAI, (NewAI->getName()+".in").c_str());
+ Value *New = ConvertScalar_InsertValue(SI->getOperand(0), Old, Offset,
+ Builder);
+ Builder.CreateStore(New, NewAI);
+ SI->eraseFromParent();
+ continue;
+ }
+
// If this is a constant sized memset of a constant value (e.g. 0) we can
// transform it into a store of the expanded constant value.
if (MemSetInst *MSI = dyn_cast<MemSetInst>(User)) {
@@ -1368,8 +1369,6 @@
for (unsigned i = 1; i != NumBytes; ++i)
APVal |= APVal << 8;
- IRBuilder<> Builder(MSI->getParent(), MSI);
-
Value *Old = Builder.CreateLoad(NewAI, (NewAI->getName()+".in").c_str());
Value *New = ConvertScalar_InsertValue(ConstantInt::get(APVal), Old,
Offset, Builder);
@@ -1393,9 +1392,9 @@
/// Offset is an offset from the original alloca, in bits that need to be
/// shifted to the right. By the end of this, there should be no uses of Ptr.
Value *SROA::ConvertUsesOfLoadToScalar(LoadInst *LI, AllocaInst *NewAI,
- uint64_t Offset) {
+ uint64_t Offset, IRBuilder<> &Builder) {
// The load is a bit extract from NewAI shifted right by Offset bits.
- Value *NV = new LoadInst(NewAI, LI->getName(), LI);
+ Value *NV = Builder.CreateLoad(NewAI, "tmp");
// If the load is of the whole new alloca, no conversion is needed.
if (NV->getType() == LI->getType() && Offset == 0)
@@ -1405,7 +1404,7 @@
// access or a bitcast to another vector type of the same size.
if (const VectorType *VTy = dyn_cast<VectorType>(NV->getType())) {
if (isa<VectorType>(LI->getType()))
- return new BitCastInst(NV, LI->getType(), LI->getName(), LI);
+ return Builder.CreateBitCast(NV, LI->getType(), "tmp");
// Otherwise it must be an element access.
unsigned Elt = 0;
@@ -1415,10 +1414,11 @@
assert(EltSize*Elt == Offset && "Invalid modulus in validity checking");
}
// Return the element extracted out of it.
- Value *V = new ExtractElementInst(NV, ConstantInt::get(Type::Int32Ty, Elt),
- "tmp", LI);
+ Value *V = Builder.CreateExtractElement(NV,
+ ConstantInt::get(Type::Int32Ty,Elt),
+ "tmp");
if (V->getType() != LI->getType())
- V = new BitCastInst(V, LI->getType(), "tmp", LI);
+ V = Builder.CreateBitCast(V, LI->getType(), "tmp");
return V;
}
@@ -1442,20 +1442,16 @@
// We do this to support (f.e.) loads off the end of a structure where
// only some bits are used.
if (ShAmt > 0 && (unsigned)ShAmt < NTy->getBitWidth())
- NV = BinaryOperator::CreateLShr(NV,
- ConstantInt::get(NV->getType(), ShAmt),
- LI->getName(), LI);
+ NV = Builder.CreateLShr(NV, ConstantInt::get(NV->getType(), ShAmt), "tmp");
else if (ShAmt < 0 && (unsigned)-ShAmt < NTy->getBitWidth())
- NV = BinaryOperator::CreateShl(NV,
- ConstantInt::get(NV->getType(), -ShAmt),
- LI->getName(), LI);
+ NV = Builder.CreateShl(NV, ConstantInt::get(NV->getType(), -ShAmt), "tmp");
// Finally, unconditionally truncate the integer to the right width.
unsigned LIBitWidth = TD->getTypeSizeInBits(LI->getType());
if (LIBitWidth < NTy->getBitWidth())
- NV = new TruncInst(NV, IntegerType::get(LIBitWidth), LI->getName(), LI);
+ NV = Builder.CreateTrunc(NV, IntegerType::get(LIBitWidth), "tmp");
else if (LIBitWidth > NTy->getBitWidth())
- NV = new ZExtInst(NV, IntegerType::get(LIBitWidth), LI->getName(), LI);
+ NV = Builder.CreateZExt(NV, IntegerType::get(LIBitWidth), "tmp");
// If the result is an integer, this is a trunc or bitcast.
if (isa<IntegerType>(LI->getType())) {
@@ -1463,10 +1459,10 @@
} else if (LI->getType()->isFloatingPoint() ||
isa<VectorType>(LI->getType())) {
// Just do a bitcast, we know the sizes match up.
- NV = new BitCastInst(NV, LI->getType(), LI->getName(), LI);
+ NV = Builder.CreateBitCast(NV, LI->getType(), "tmp");
} else {
// Otherwise must be a pointer.
- NV = new IntToPtrInst(NV, LI->getType(), LI->getName(), LI);
+ NV = Builder.CreateIntToPtr(NV, LI->getType(), "tmp");
}
assert(NV->getType() == LI->getType() && "Didn't convert right?");
return NV;
More information about the llvm-commits
mailing list