[llvm-commits] [llvm] r63651 - /llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp
Chris Lattner
sabre at nondot.org
Tue Feb 3 11:41:50 PST 2009
Author: lattner
Date: Tue Feb 3 13:41:50 2009
New Revision: 63651
URL: http://llvm.org/viewvc/llvm-project?rev=63651&view=rev
Log:
switch ConvertScalar_InsertValue to use an 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=63651&r1=63650&r2=63651&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp Tue Feb 3 13:41:50 2009
@@ -33,6 +33,7 @@
#include "llvm/Transforms/Utils/PromoteMemToReg.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/GetElementPtrTypeIterator.h"
+#include "llvm/Support/IRBuilder.h"
#include "llvm/Support/MathExtras.h"
#include "llvm/Support/Compiler.h"
#include "llvm/ADT/SmallVector.h"
@@ -131,7 +132,7 @@
Value *ConvertUsesOfLoadToScalar(LoadInst *LI, AllocaInst *NewAI,
uint64_t Offset);
Value *ConvertScalar_InsertValue(Value *StoredVal, Value *ExistingVal,
- uint64_t Offset, Instruction *InsertPt);
+ uint64_t Offset, IRBuilder<> &Builder);
static Instruction *isOnlyCopiedFromConstantGlobal(AllocationInst *AI);
};
}
@@ -1326,9 +1327,12 @@
if (StoreInst *SI = dyn_cast<StoreInst>(User)) {
assert(SI->getOperand(0) != Ptr && "Consistency error!");
- Value *Old = new LoadInst(NewAI, NewAI->getName()+".in", SI);
- Value *New = ConvertScalar_InsertValue(SI->getOperand(0), Old, Offset,SI);
- new StoreInst(New, NewAI, SI);
+
+ 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;
}
@@ -1364,10 +1368,12 @@
for (unsigned i = 1; i != NumBytes; ++i)
APVal |= APVal << 8;
- Value *Old = new LoadInst(NewAI, NewAI->getName()+".in", MSI);
+ IRBuilder<> Builder(MSI->getParent(), MSI);
+
+ Value *Old = Builder.CreateLoad(NewAI, (NewAI->getName()+".in").c_str());
Value *New = ConvertScalar_InsertValue(ConstantInt::get(APVal), Old,
- Offset, MSI);
- new StoreInst(New, NewAI, MSI);
+ Offset, Builder);
+ Builder.CreateStore(New, NewAI);
MSI->eraseFromParent();
continue;
}
@@ -1477,7 +1483,7 @@
/// Offset is an offset from the original alloca, in bits that need to be
/// shifted to the right.
Value *SROA::ConvertScalar_InsertValue(Value *SV, Value *Old,
- uint64_t Offset, Instruction *IP) {
+ uint64_t Offset, IRBuilder<> &Builder) {
// Convert the stored type to the actual type, shift it left to insert
// then 'or' into place.
@@ -1487,17 +1493,17 @@
// If the result alloca is a vector type, this is either an element
// access or a bitcast to another vector type.
if (isa<VectorType>(SV->getType())) {
- SV = new BitCastInst(SV, AllocaType, SV->getName(), IP);
+ SV = Builder.CreateBitCast(SV, AllocaType, "tmp");
} else {
// Must be an element insertion.
unsigned Elt = Offset/TD->getTypePaddedSizeInBits(VTy->getElementType());
if (SV->getType() != VTy->getElementType())
- SV = new BitCastInst(SV, VTy->getElementType(), "tmp", IP);
+ SV = Builder.CreateBitCast(SV, VTy->getElementType(), "tmp");
- SV = InsertElementInst::Create(Old, SV,
- ConstantInt::get(Type::Int32Ty, Elt),
- "tmp", IP);
+ SV = Builder.CreateInsertElement(Old, SV,
+ ConstantInt::get(Type::Int32Ty, Elt),
+ "tmp");
}
return SV;
}
@@ -1506,9 +1512,10 @@
if (const StructType *ST = dyn_cast<StructType>(SV->getType())) {
const StructLayout &Layout = *TD->getStructLayout(ST);
for (unsigned i = 0, e = ST->getNumElements(); i != e; ++i) {
- Value *Elt = ExtractValueInst::Create(SV, i, "tmp", IP);
+ Value *Elt = Builder.CreateExtractValue(SV, i, "tmp");
Old = ConvertScalar_InsertValue(Elt, Old,
- Offset+Layout.getElementOffset(i), IP);
+ Offset+Layout.getElementOffset(i),
+ Builder);
}
return Old;
}
@@ -1516,8 +1523,8 @@
if (const ArrayType *AT = dyn_cast<ArrayType>(SV->getType())) {
uint64_t EltSize = TD->getTypePaddedSizeInBits(AT->getElementType());
for (unsigned i = 0, e = AT->getNumElements(); i != e; ++i) {
- Value *Elt = ExtractValueInst::Create(SV, i, "tmp", IP);
- Old = ConvertScalar_InsertValue(Elt, Old, Offset+i*EltSize, IP);
+ Value *Elt = Builder.CreateExtractValue(SV, i, "tmp");
+ Old = ConvertScalar_InsertValue(Elt, Old, Offset+i*EltSize, Builder);
}
return Old;
}
@@ -1529,19 +1536,19 @@
unsigned SrcStoreWidth = TD->getTypeStoreSizeInBits(SV->getType());
unsigned DestStoreWidth = TD->getTypeStoreSizeInBits(AllocaType);
if (SV->getType()->isFloatingPoint() || isa<VectorType>(SV->getType()))
- SV = new BitCastInst(SV, IntegerType::get(SrcWidth), SV->getName(), IP);
+ SV = Builder.CreateBitCast(SV, IntegerType::get(SrcWidth), "tmp");
else if (isa<PointerType>(SV->getType()))
- SV = new PtrToIntInst(SV, TD->getIntPtrType(), SV->getName(), IP);
+ SV = Builder.CreatePtrToInt(SV, TD->getIntPtrType(), "tmp");
// Zero extend or truncate the value if needed.
if (SV->getType() != AllocaType) {
if (SV->getType()->getPrimitiveSizeInBits() <
AllocaType->getPrimitiveSizeInBits())
- SV = new ZExtInst(SV, AllocaType, SV->getName(), IP);
+ SV = Builder.CreateZExt(SV, AllocaType, "tmp");
else {
// Truncation may be needed if storing more than the alloca can hold
// (undefined behavior).
- SV = new TruncInst(SV, AllocaType, SV->getName(), IP);
+ SV = Builder.CreateTrunc(SV, AllocaType, "tmp");
SrcWidth = DestWidth;
SrcStoreWidth = DestStoreWidth;
}
@@ -1564,14 +1571,10 @@
// only some bits in the structure are set.
APInt Mask(APInt::getLowBitsSet(DestWidth, SrcWidth));
if (ShAmt > 0 && (unsigned)ShAmt < DestWidth) {
- SV = BinaryOperator::CreateShl(SV,
- ConstantInt::get(SV->getType(), ShAmt),
- SV->getName(), IP);
+ SV = Builder.CreateShl(SV, ConstantInt::get(SV->getType(), ShAmt), "tmp");
Mask <<= ShAmt;
} else if (ShAmt < 0 && (unsigned)-ShAmt < DestWidth) {
- SV = BinaryOperator::CreateLShr(SV,
- ConstantInt::get(SV->getType(), -ShAmt),
- SV->getName(), IP);
+ SV = Builder.CreateLShr(SV, ConstantInt::get(SV->getType(), -ShAmt), "tmp");
Mask = Mask.lshr(-ShAmt);
}
@@ -1579,9 +1582,8 @@
// in the new bits.
if (SrcWidth != DestWidth) {
assert(DestWidth > SrcWidth);
- Old = BinaryOperator::CreateAnd(Old, ConstantInt::get(~Mask),
- Old->getName()+".mask", IP);
- SV = BinaryOperator::CreateOr(Old, SV, SV->getName()+".ins", IP);
+ Old = Builder.CreateAnd(Old, ConstantInt::get(~Mask), "mask");
+ SV = Builder.CreateOr(Old, SV, "ins");
}
return SV;
}
More information about the llvm-commits
mailing list