summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorArtur Pilipenko <apilipenko@azulsystems.com>2015-09-18 12:33:31 +0000
committerArtur Pilipenko <apilipenko@azulsystems.com>2015-09-18 12:33:31 +0000
commit84bc62f7a350ab9a513f5ee28e22ac4e34b1503d (patch)
treed27231d5454dd1b275f22f235e64722afbaa40b4 /llvm/lib
parenteda0a48e53cdc24b911609890bdc41103afe32c0 (diff)
downloadbcm5719-llvm-84bc62f7a350ab9a513f5ee28e22ac4e34b1503d.tar.gz
bcm5719-llvm-84bc62f7a350ab9a513f5ee28e22ac4e34b1503d.zip
Support align attribute for return values
Reviewed By: reames Differential Revision: http://reviews.llvm.org/D12844 llvm-svn: 247984
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Analysis/ValueTracking.cpp2
-rw-r--r--llvm/lib/AsmParser/LLParser.cpp8
2 files changed, 9 insertions, 1 deletions
diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp
index ff20a0f2b42..98fbfdc861c 100644
--- a/llvm/lib/Analysis/ValueTracking.cpp
+++ b/llvm/lib/Analysis/ValueTracking.cpp
@@ -2952,6 +2952,8 @@ static bool isAligned(const Value *Base, APInt Offset, unsigned Align,
BaseAlign = GV->getAlignment();
else if (const Argument *A = dyn_cast<Argument>(Base))
BaseAlign = A->getParamAlignment();
+ else if (auto CS = ImmutableCallSite(Base))
+ BaseAlign = CS.getAttributes().getParamAlignment(AttributeSet::ReturnIndex);
if (!BaseAlign) {
Type *Ty = Base->getType()->getPointerElementType();
diff --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp
index b2f7af61743..d7a05fe99c8 100644
--- a/llvm/lib/AsmParser/LLParser.cpp
+++ b/llvm/lib/AsmParser/LLParser.cpp
@@ -1380,6 +1380,13 @@ bool LLParser::ParseOptionalReturnAttrs(AttrBuilder &B) {
B.addDereferenceableOrNullAttr(Bytes);
continue;
}
+ case lltok::kw_align: {
+ unsigned Alignment;
+ if (ParseOptionalAlignment(Alignment))
+ return true;
+ B.addAlignmentAttr(Alignment);
+ continue;
+ }
case lltok::kw_inreg: B.addAttribute(Attribute::InReg); break;
case lltok::kw_noalias: B.addAttribute(Attribute::NoAlias); break;
case lltok::kw_nonnull: B.addAttribute(Attribute::NonNull); break;
@@ -1387,7 +1394,6 @@ bool LLParser::ParseOptionalReturnAttrs(AttrBuilder &B) {
case lltok::kw_zeroext: B.addAttribute(Attribute::ZExt); break;
// Error handling.
- case lltok::kw_align:
case lltok::kw_byval:
case lltok::kw_inalloca:
case lltok::kw_nest:
OpenPOWER on IntegriCloud