mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-25 13:24:46 +00:00
Implement the NoBuiltin attribute.
The 'nobuiltin' attribute is applied to call sites to indicate that LLVM should not treat the callee function as a built-in function. I.e., it shouldn't try to replace that function with different code. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@175835 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -171,6 +171,8 @@ std::string Attribute::getAsString(bool InAttrGrp) const {
|
||||
return "nest";
|
||||
if (hasAttribute(Attribute::NoAlias))
|
||||
return "noalias";
|
||||
if (hasAttribute(Attribute::NoBuiltin))
|
||||
return "nobuiltin";
|
||||
if (hasAttribute(Attribute::NoCapture))
|
||||
return "nocapture";
|
||||
if (hasAttribute(Attribute::NoDuplicate))
|
||||
@@ -354,6 +356,8 @@ bool AttributeImpl::operator<(const AttributeImpl &AI) const {
|
||||
uint64_t AttributeImpl::getAttrMask(Attribute::AttrKind Val) {
|
||||
// FIXME: Remove this.
|
||||
switch (Val) {
|
||||
default:
|
||||
llvm_unreachable("Unsupported attribute type");
|
||||
case Attribute::EndAttrKinds:
|
||||
llvm_unreachable("Synthetic enumerators which should never get here");
|
||||
|
||||
@@ -391,7 +395,6 @@ uint64_t AttributeImpl::getAttrMask(Attribute::AttrKind Val) {
|
||||
case Attribute::ThreadSafety: return 1ULL << 36;
|
||||
case Attribute::UninitializedChecks: return 1ULL << 37;
|
||||
}
|
||||
llvm_unreachable("Unsupported attribute type");
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
@@ -1097,6 +1100,33 @@ bool AttrBuilder::operator==(const AttrBuilder &B) {
|
||||
return Alignment == B.Alignment && StackAlignment == B.StackAlignment;
|
||||
}
|
||||
|
||||
void AttrBuilder::removeFunctionOnlyAttrs() {
|
||||
removeAttribute(Attribute::NoReturn)
|
||||
.removeAttribute(Attribute::NoUnwind)
|
||||
.removeAttribute(Attribute::ReadNone)
|
||||
.removeAttribute(Attribute::ReadOnly)
|
||||
.removeAttribute(Attribute::NoInline)
|
||||
.removeAttribute(Attribute::AlwaysInline)
|
||||
.removeAttribute(Attribute::OptimizeForSize)
|
||||
.removeAttribute(Attribute::StackProtect)
|
||||
.removeAttribute(Attribute::StackProtectReq)
|
||||
.removeAttribute(Attribute::StackProtectStrong)
|
||||
.removeAttribute(Attribute::NoRedZone)
|
||||
.removeAttribute(Attribute::NoImplicitFloat)
|
||||
.removeAttribute(Attribute::Naked)
|
||||
.removeAttribute(Attribute::InlineHint)
|
||||
.removeAttribute(Attribute::StackAlignment)
|
||||
.removeAttribute(Attribute::UWTable)
|
||||
.removeAttribute(Attribute::NonLazyBind)
|
||||
.removeAttribute(Attribute::ReturnsTwice)
|
||||
.removeAttribute(Attribute::AddressSafety)
|
||||
.removeAttribute(Attribute::ThreadSafety)
|
||||
.removeAttribute(Attribute::UninitializedChecks)
|
||||
.removeAttribute(Attribute::MinSize)
|
||||
.removeAttribute(Attribute::NoDuplicate)
|
||||
.removeAttribute(Attribute::NoBuiltin);
|
||||
}
|
||||
|
||||
AttrBuilder &AttrBuilder::addRawValue(uint64_t Val) {
|
||||
// FIXME: Remove this in 4.0.
|
||||
if (!Val) return *this;
|
||||
|
Reference in New Issue
Block a user