From 4e1b62665e8a07670b034e85a6001ad1a4a28137 Mon Sep 17 00:00:00 2001 From: Chris Apple Date: Tue, 23 Jul 2024 10:09:59 -0700 Subject: [PATCH] Remove attribute, use function effects directly in CGCall --- clang/lib/CodeGen/CGCall.cpp | 6 ------ clang/lib/CodeGen/CodeGenFunction.cpp | 16 ++++++++++++---- llvm/include/llvm/Bitcode/LLVMBitCodes.h | 1 - llvm/include/llvm/IR/Attributes.td | 3 --- llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 2 -- llvm/lib/Bitcode/Writer/BitcodeWriter.cpp | 2 -- llvm/lib/Transforms/Utils/CodeExtractor.cpp | 1 - 7 files changed, 12 insertions(+), 19 deletions(-) diff --git a/clang/lib/CodeGen/CGCall.cpp b/clang/lib/CodeGen/CGCall.cpp index 7af7785515688..d582aba679ddc 100644 --- a/clang/lib/CodeGen/CGCall.cpp +++ b/clang/lib/CodeGen/CGCall.cpp @@ -2408,12 +2408,6 @@ void CodeGenModule::ConstructAttributeList(StringRef Name, FuncAttrs.addAttribute(llvm::Attribute::NoReturn); NBA = Fn->getAttr(); } - - for (const FunctionEffectWithCondition &Fe : Fn->getFunctionEffects()) { - if (Fe.Effect.kind() == FunctionEffect::Kind::NonBlocking) { - FuncAttrs.addAttribute(llvm::Attribute::NonBlocking); - } - } } if (isa(TargetDecl) || isa(TargetDecl)) { diff --git a/clang/lib/CodeGen/CodeGenFunction.cpp b/clang/lib/CodeGen/CodeGenFunction.cpp index 84ce2b20dd45d..9346218bd1ce4 100644 --- a/clang/lib/CodeGen/CodeGenFunction.cpp +++ b/clang/lib/CodeGen/CodeGenFunction.cpp @@ -1612,16 +1612,24 @@ void CodeGenFunction::GenerateCode(GlobalDecl GD, llvm::Function *Fn, } if (SanOpts.has(SanitizerKind::Realtime)) { - if (Fn->hasFnAttribute(llvm::Attribute::NonBlocking)) - InsertCallAtFunctionEntryPoint(Fn, "__rtsan_realtime_enter"); + for (const FunctionEffectWithCondition &Fe : FD->getFunctionEffects()) { + if (Fe.Effect.kind() == FunctionEffect::Kind::NonBlocking) { + InsertCallAtFunctionEntryPoint(Fn, "__rtsan_realtime_enter"); + break; + } + } } // Emit the standard function epilogue. FinishFunction(BodyRange.getEnd()); if (SanOpts.has(SanitizerKind::Realtime)) { - if (Fn->hasFnAttribute(llvm::Attribute::NonBlocking)) - InsertCallAtAllFunctionExitPoints(Fn, "__rtsan_realtime_exit"); + for (const FunctionEffectWithCondition &Fe : FD->getFunctionEffects()) { + if (Fe.Effect.kind() == FunctionEffect::Kind::NonBlocking) { + InsertCallAtAllFunctionExitPoints(Fn, "__rtsan_realtime_exit"); + break; + } + } } // If we haven't marked the function nothrow through other means, do diff --git a/llvm/include/llvm/Bitcode/LLVMBitCodes.h b/llvm/include/llvm/Bitcode/LLVMBitCodes.h index 61b046c26a97f..fb88f2fe75adb 100644 --- a/llvm/include/llvm/Bitcode/LLVMBitCodes.h +++ b/llvm/include/llvm/Bitcode/LLVMBitCodes.h @@ -758,7 +758,6 @@ enum AttributeKindCodes { ATTR_KIND_SANITIZE_NUMERICAL_STABILITY = 93, ATTR_KIND_INITIALIZES = 94, ATTR_KIND_HYBRID_PATCHABLE = 95, - ATTR_KIND_NONBLOCKING = 96, }; enum ComdatSelectionKindCodes { diff --git a/llvm/include/llvm/IR/Attributes.td b/llvm/include/llvm/IR/Attributes.td index 8d90e912f279c..e1bd193891c1e 100644 --- a/llvm/include/llvm/IR/Attributes.td +++ b/llvm/include/llvm/IR/Attributes.td @@ -239,9 +239,6 @@ def ReadNone : EnumAttr<"readnone", [ParamAttr]>; /// Function only reads from memory. def ReadOnly : EnumAttr<"readonly", [ParamAttr]>; -/// Function is marked to be non-blocking -def NonBlocking : EnumAttr<"nonblocking", [FnAttr]>; - /// Return value is always equal to this argument. def Returned : EnumAttr<"returned", [ParamAttr]>; diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp index a519748bc1c83..84d624f6cf8fa 100644 --- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp @@ -2109,8 +2109,6 @@ static Attribute::AttrKind getAttrFromCode(uint64_t Code) { return Attribute::ReadOnly; case bitc::ATTR_KIND_RETURNED: return Attribute::Returned; - case bitc::ATTR_KIND_NONBLOCKING: - return Attribute::NonBlocking; case bitc::ATTR_KIND_RETURNS_TWICE: return Attribute::ReturnsTwice; case bitc::ATTR_KIND_S_EXT: diff --git a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp index d54aeae74a59f..324dcbca8137e 100644 --- a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp +++ b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp @@ -805,8 +805,6 @@ static uint64_t getAttrKindEncoding(Attribute::AttrKind Kind) { return bitc::ATTR_KIND_OPTIMIZE_FOR_SIZE; case Attribute::OptimizeNone: return bitc::ATTR_KIND_OPTIMIZE_NONE; - case Attribute::NonBlocking: - return bitc::ATTR_KIND_NONBLOCKING; case Attribute::ReadNone: return bitc::ATTR_KIND_READ_NONE; case Attribute::ReadOnly: diff --git a/llvm/lib/Transforms/Utils/CodeExtractor.cpp b/llvm/lib/Transforms/Utils/CodeExtractor.cpp index 913c0f844f833..5bca5cf8ff91f 100644 --- a/llvm/lib/Transforms/Utils/CodeExtractor.cpp +++ b/llvm/lib/Transforms/Utils/CodeExtractor.cpp @@ -970,7 +970,6 @@ Function *CodeExtractor::constructFunction(const ValueSet &inputs, case Attribute::MustProgress: case Attribute::NoProfile: case Attribute::SkipProfile: - case Attribute::NonBlocking: break; // These attributes cannot be applied to functions. case Attribute::Alignment: