Introduce !align metadata for load instruction
[oota-llvm.git] / lib / Analysis / ValueTracking.cpp
index 736077dc47760a8ffd6fbcdfaa6afe48bdaa8ec9..5481e722e536d996ae08e3afe783c255912ba7c5 100644 (file)
@@ -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();