[llvm-commits] [llvm] r66364 - in /llvm/trunk: include/llvm/IntrinsicInst.h lib/Transforms/Scalar/InstructionCombining.cpp lib/Transforms/Scalar/MemCpyOptimizer.cpp lib/Transforms/Scalar/ScalarReplAggregates.cpp
Chris Lattner
sabre at nondot.org
Sat Mar 7 19:59:01 PST 2009
Author: lattner
Date: Sat Mar 7 21:59:00 2009
New Revision: 66364
URL: http://llvm.org/viewvc/llvm-project?rev=66364&view=rev
Log:
change the MemIntrinsic get/setAlignment method to take an unsigned
instead of a Constant*, which is what the clients of it really want.
Modified:
llvm/trunk/include/llvm/IntrinsicInst.h
llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp
llvm/trunk/lib/Transforms/Scalar/MemCpyOptimizer.cpp
llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp
Modified: llvm/trunk/include/llvm/IntrinsicInst.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IntrinsicInst.h?rev=66364&r1=66363&r2=66364&view=diff
==============================================================================
--- llvm/trunk/include/llvm/IntrinsicInst.h (original)
+++ llvm/trunk/include/llvm/IntrinsicInst.h Sat Mar 7 21:59:00 2009
@@ -176,9 +176,13 @@
Value *getRawDest() const { return const_cast<Value*>(getOperand(1)); }
Value *getLength() const { return const_cast<Value*>(getOperand(3)); }
- ConstantInt *getAlignment() const {
+ ConstantInt *getAlignmentCst() const {
return cast<ConstantInt>(const_cast<Value*>(getOperand(4)));
}
+
+ unsigned getAlignment() const {
+ return getAlignmentCst()->getZExtValue();
+ }
/// getDest - This is just like getRawDest, but it strips off any cast
/// instructions that feed it, giving the original input. The returned
@@ -198,12 +202,11 @@
"setLength called with value of wrong type!");
setOperand(3, L);
}
- void setAlignment(ConstantInt *A) {
- assert(getAlignment()->getType() == A->getType() &&
- "setAlignment called with value of wrong type!");
- setOperand(4, A);
+ void setAlignment(unsigned A) {
+ const Type *Int32Ty = getOperand(4)->getType();
+ setOperand(4, ConstantInt::get(Int32Ty, A));
}
-
+
// Methods for support type inquiry through isa, cast, and dyn_cast:
static inline bool classof(const MemIntrinsic *) { return true; }
static inline bool classof(const IntrinsicInst *I) {
Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp?rev=66364&r1=66363&r2=66364&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Sat Mar 7 21:59:00 2009
@@ -9302,10 +9302,10 @@
unsigned DstAlign = GetOrEnforceKnownAlignment(MI->getOperand(1));
unsigned SrcAlign = GetOrEnforceKnownAlignment(MI->getOperand(2));
unsigned MinAlign = std::min(DstAlign, SrcAlign);
- unsigned CopyAlign = MI->getAlignment()->getZExtValue();
+ unsigned CopyAlign = MI->getAlignment();
if (CopyAlign < MinAlign) {
- MI->setAlignment(ConstantInt::get(Type::Int32Ty, MinAlign));
+ MI->setAlignment(MinAlign);
return MI;
}
@@ -9377,8 +9377,8 @@
Instruction *InstCombiner::SimplifyMemSet(MemSetInst *MI) {
unsigned Alignment = GetOrEnforceKnownAlignment(MI->getDest());
- if (MI->getAlignment()->getZExtValue() < Alignment) {
- MI->setAlignment(ConstantInt::get(Type::Int32Ty, Alignment));
+ if (MI->getAlignment() < Alignment) {
+ MI->setAlignment(Alignment);
return MI;
}
@@ -9388,7 +9388,7 @@
if (!LenC || !FillC || FillC->getType() != Type::Int8Ty)
return 0;
uint64_t Len = LenC->getZExtValue();
- Alignment = MI->getAlignment()->getZExtValue();
+ Alignment = MI->getAlignment();
// If the length is zero, this is a no-op
if (Len == 0) return MI; // memset(d,c,0,a) -> noop
Modified: llvm/trunk/lib/Transforms/Scalar/MemCpyOptimizer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/MemCpyOptimizer.cpp?rev=66364&r1=66363&r2=66364&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/MemCpyOptimizer.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/MemCpyOptimizer.cpp Sat Mar 7 21:59:00 2009
@@ -678,13 +678,11 @@
M->getParent()->getParent()->getParent(),
M->getIntrinsicID(), Tys, 1);
- std::vector<Value*> args;
- args.push_back(M->getRawDest());
- args.push_back(MDep->getRawSource());
- args.push_back(M->getLength());
- args.push_back(M->getAlignment());
+ Value *Args[4] = {
+ M->getRawDest(), MDep->getRawSource(), M->getLength(), M->getAlignmentCst()
+ };
- CallInst* C = CallInst::Create(MemCpyFun, args.begin(), args.end(), "", M);
+ CallInst* C = CallInst::Create(MemCpyFun, Args, Args+4, "", M);
// If C and M don't interfere, then this is a valid transformation. If they
Modified: llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp?rev=66364&r1=66363&r2=66364&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp Sat Mar 7 21:59:00 2009
@@ -725,7 +725,7 @@
// that doesn't have anything to do with the alloca that we are promoting. For
// memset, this Value* stays null.
Value *OtherPtr = 0;
- unsigned MemAlignment = MI->getAlignment()->getZExtValue();
+ unsigned MemAlignment = MI->getAlignment();
if (MemTransferInst *MTI = dyn_cast<MemTransferInst>(MI)) { // memmove/memcopy
if (BCInst == MTI->getRawDest())
OtherPtr = MTI->getRawSource();
@@ -1356,7 +1356,7 @@
continue;
}
}
-
+
// Ignore dbg intrinsic.
if (isa<DbgInfoIntrinsic>(User))
continue;
@@ -1440,7 +1440,7 @@
MSI->eraseFromParent();
continue;
}
-
+
// If user is a dbg info intrinsic then it is safe to remove it.
if (isa<DbgInfoIntrinsic>(User)) {
User->eraseFromParent();
More information about the llvm-commits
mailing list