diff options
| author | Chris Lattner <sabre@nondot.org> | 2009-03-08 03:59:00 +0000 | 
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2009-03-08 03:59:00 +0000 | 
| commit | dc35e5b43aa37e961d4603611ad7d47b7b96a0ed (patch) | |
| tree | 1bf11ac54639ec2996acaccb2c27f2443250ff30 /llvm | |
| parent | de22116f39d8656e02c1665cfecd5561e1d7ebe5 (diff) | |
| download | bcm5719-llvm-dc35e5b43aa37e961d4603611ad7d47b7b96a0ed.tar.gz bcm5719-llvm-dc35e5b43aa37e961d4603611ad7d47b7b96a0ed.zip  | |
change the MemIntrinsic get/setAlignment method to take an unsigned
instead of a Constant*, which is what the clients of it really want.
llvm-svn: 66364
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/include/llvm/IntrinsicInst.h | 15 | ||||
| -rw-r--r-- | llvm/lib/Transforms/Scalar/InstructionCombining.cpp | 10 | ||||
| -rw-r--r-- | llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp | 10 | ||||
| -rw-r--r-- | llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp | 6 | 
4 files changed, 21 insertions, 20 deletions
diff --git a/llvm/include/llvm/IntrinsicInst.h b/llvm/include/llvm/IntrinsicInst.h index 924fec26d27..8f5e05f70cd 100644 --- a/llvm/include/llvm/IntrinsicInst.h +++ b/llvm/include/llvm/IntrinsicInst.h @@ -176,9 +176,13 @@ namespace llvm {      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 @@ namespace llvm {               "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) { diff --git a/llvm/lib/Transforms/Scalar/InstructionCombining.cpp b/llvm/lib/Transforms/Scalar/InstructionCombining.cpp index 09722d9c492..86048e6a15e 100644 --- a/llvm/lib/Transforms/Scalar/InstructionCombining.cpp +++ b/llvm/lib/Transforms/Scalar/InstructionCombining.cpp @@ -9302,10 +9302,10 @@ Instruction *InstCombiner::SimplifyMemTransfer(MemIntrinsic *MI) {    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::SimplifyMemTransfer(MemIntrinsic *MI) {  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 @@ Instruction *InstCombiner::SimplifyMemSet(MemSetInst *MI) {    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 diff --git a/llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp b/llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp index be9db9692f2..fc9f5f26c9f 100644 --- a/llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp +++ b/llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp @@ -678,13 +678,11 @@ bool MemCpyOpt::processMemCpy(MemCpyInst* M) {                                   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 diff --git a/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp b/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp index 351ecea1dd6..644625f56a0 100644 --- a/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp +++ b/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp @@ -725,7 +725,7 @@ void SROA::RewriteMemIntrinUserOfAlloca(MemIntrinsic *MI, Instruction *BCInst,    // 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 @@ bool SROA::CanConvertToScalar(Value *V, bool &IsNotTrivial, const Type *&VecTy,          continue;        }      } - +          // Ignore dbg intrinsic.      if (isa<DbgInfoIntrinsic>(User))        continue; @@ -1440,7 +1440,7 @@ void SROA::ConvertUsesToScalar(Value *Ptr, AllocaInst *NewAI, uint64_t Offset) {        MSI->eraseFromParent();        continue;      } - +          // If user is a dbg info intrinsic then it is safe to remove it.      if (isa<DbgInfoIntrinsic>(User)) {        User->eraseFromParent();  | 

