diff options
| author | Bob Wilson <bob.wilson@apple.com> | 2010-10-22 21:41:48 +0000 | 
|---|---|---|
| committer | Bob Wilson <bob.wilson@apple.com> | 2010-10-22 21:41:48 +0000 | 
| commit | a4e231c880e83317ee4463abb12f7f2d8568aa6f (patch) | |
| tree | b1115ac0ce41ae91deb8c23147e7ce7f02842922 /llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp | |
| parent | f3f1e00e24db4bc80a4c614b809bbc0081c0c326 (diff) | |
| download | bcm5719-llvm-a4e231c880e83317ee4463abb12f7f2d8568aa6f.tar.gz bcm5719-llvm-a4e231c880e83317ee4463abb12f7f2d8568aa6f.zip  | |
Teach instcombine to set the alignment arguments for NEON load/store intrinsics.
llvm-svn: 117154
Diffstat (limited to 'llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp')
| -rw-r--r-- | llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp | 26 | 
1 files changed, 26 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp index ed078ec1c51..d53f3291e71 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp @@ -702,6 +702,32 @@ Instruction *InstCombiner::visitCallInst(CallInst &CI) {      }      break; +  case Intrinsic::arm_neon_vld1: +  case Intrinsic::arm_neon_vld2: +  case Intrinsic::arm_neon_vld3: +  case Intrinsic::arm_neon_vld4: +  case Intrinsic::arm_neon_vld2lane: +  case Intrinsic::arm_neon_vld3lane: +  case Intrinsic::arm_neon_vld4lane: +  case Intrinsic::arm_neon_vst1: +  case Intrinsic::arm_neon_vst2: +  case Intrinsic::arm_neon_vst3: +  case Intrinsic::arm_neon_vst4: +  case Intrinsic::arm_neon_vst2lane: +  case Intrinsic::arm_neon_vst3lane: +  case Intrinsic::arm_neon_vst4lane: { +    unsigned MemAlign = GetOrEnforceKnownAlignment(II->getArgOperand(0)); +    unsigned AlignArg = II->getNumArgOperands() - 1; +    ConstantInt *IntrAlign = dyn_cast<ConstantInt>(II->getArgOperand(AlignArg)); +    if (IntrAlign && IntrAlign->getZExtValue() < MemAlign) { +      II->setArgOperand(AlignArg, +                        ConstantInt::get(Type::getInt32Ty(II->getContext()), +                                         MemAlign, false)); +      return II; +    } +    break; +  } +    case Intrinsic::stackrestore: {      // If the save is right next to the restore, remove the restore.  This can      // happen when variable allocas are DCE'd.  | 

