diff options
author | Artur Pilipenko <apilipenko@azulsystems.com> | 2015-09-18 12:33:31 +0000 |
---|---|---|
committer | Artur Pilipenko <apilipenko@azulsystems.com> | 2015-09-18 12:33:31 +0000 |
commit | 84bc62f7a350ab9a513f5ee28e22ac4e34b1503d (patch) | |
tree | d27231d5454dd1b275f22f235e64722afbaa40b4 /llvm/lib | |
parent | eda0a48e53cdc24b911609890bdc41103afe32c0 (diff) | |
download | bcm5719-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.cpp | 2 | ||||
-rw-r--r-- | llvm/lib/AsmParser/LLParser.cpp | 8 |
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: |