diff options
| author | Artur Pilipenko <apilipenko@azulsystems.com> | 2015-09-28 17:41:08 +0000 |
|---|---|---|
| committer | Artur Pilipenko <apilipenko@azulsystems.com> | 2015-09-28 17:41:08 +0000 |
| commit | b4d009042bb897bc21b9ef8cb99785533488f7b2 (patch) | |
| tree | 2a07bde627ee4e887a1b05689ed7e5eb20d4fb38 /llvm/lib | |
| parent | 8aba4b058908937817443b8a23e1829806471b86 (diff) | |
| download | bcm5719-llvm-b4d009042bb897bc21b9ef8cb99785533488f7b2.tar.gz bcm5719-llvm-b4d009042bb897bc21b9ef8cb99785533488f7b2.zip | |
Introduce !align metadata for load instruction
Reviewed By: hfinkel
Differential Revision: http://reviews.llvm.org/D12853
llvm-svn: 248721
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Analysis/ValueTracking.cpp | 5 | ||||
| -rw-r--r-- | llvm/lib/IR/LLVMContext.cpp | 4 |
2 files changed, 9 insertions, 0 deletions
diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp index 736077dc477..5481e722e53 100644 --- a/llvm/lib/Analysis/ValueTracking.cpp +++ b/llvm/lib/Analysis/ValueTracking.cpp @@ -2979,6 +2979,11 @@ static bool isAligned(const Value *Base, APInt Offset, unsigned Align, BaseAlign = A->getParamAlignment(); else if (auto CS = ImmutableCallSite(Base)) BaseAlign = CS.getAttributes().getParamAlignment(AttributeSet::ReturnIndex); + else if (const LoadInst *LI = dyn_cast<LoadInst>(Base)) + if (MDNode *MD = LI->getMetadata(LLVMContext::MD_align)) { + ConstantInt *CI = mdconst::extract<ConstantInt>(MD->getOperand(0)); + BaseAlign = CI->getLimitedValue(); + } if (!BaseAlign) { Type *Ty = Base->getType()->getPointerElementType(); diff --git a/llvm/lib/IR/LLVMContext.cpp b/llvm/lib/IR/LLVMContext.cpp index ee971c1be19..cecc6335ef1 100644 --- a/llvm/lib/IR/LLVMContext.cpp +++ b/llvm/lib/IR/LLVMContext.cpp @@ -123,6 +123,10 @@ LLVMContext::LLVMContext() : pImpl(new LLVMContextImpl(*this)) { "invariant.group kind id drifted"); (void)InvariantGroupId; + // Create the 'align' metadata kind. + unsigned AlignID = getMDKindID("align"); + assert(AlignID == MD_align && "align kind id drifted"); + (void)AlignID; } LLVMContext::~LLVMContext() { delete pImpl; } |

