Skip to content

Commit

Permalink
[NFC][Clang] Remove redundant function definitions
Browse files Browse the repository at this point in the history
There were 3 definitions of the mergeDefaultFunctionDefinitionAttributes
function: A private implementation, a version exposed in CodeGen, a
version exposed in CodeGenModule.

This patch removes the private and the CodeGenModule versions and keeps
a single definition in CodeGen.

Reviewed By: jhuber6

Differential Revision: https://reviews.llvm.org/D159256
  • Loading branch information
Juan Manuel MARTINEZ CAAMAÑO committed Aug 31, 2023
1 parent 9536bbe commit 19550e7
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 45 deletions.
23 changes: 1 addition & 22 deletions clang/lib/CodeGen/CGCall.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2002,10 +2002,7 @@ static void getTrivialDefaultFunctionAttributes(
}
}

/// Adds attributes to \p F according to our \p CodeGenOpts and \p LangOpts, as
/// though we had emitted it ourselves. We remove any attributes on F that
/// conflict with the attributes we add here.
static void mergeDefaultFunctionDefinitionAttributes(
void CodeGen::mergeDefaultFunctionDefinitionAttributes(
llvm::Function &F, const CodeGenOptions &CodeGenOpts,
const LangOptions &LangOpts, const TargetOptions &TargetOpts,
bool WillInternalize) {
Expand Down Expand Up @@ -2065,15 +2062,6 @@ static void mergeDefaultFunctionDefinitionAttributes(
F.addFnAttrs(FuncAttrs);
}

void clang::CodeGen::mergeDefaultFunctionDefinitionAttributes(
llvm::Function &F, const CodeGenOptions CodeGenOpts,
const LangOptions &LangOpts, const TargetOptions &TargetOpts,
bool WillInternalize) {

::mergeDefaultFunctionDefinitionAttributes(F, CodeGenOpts, LangOpts,
TargetOpts, WillInternalize);
}

void CodeGenModule::getTrivialDefaultFunctionAttributes(
StringRef Name, bool HasOptnone, bool AttrOnCallSite,
llvm::AttrBuilder &FuncAttrs) {
Expand All @@ -2094,15 +2082,6 @@ void CodeGenModule::getDefaultFunctionAttributes(StringRef Name,
addMergableDefaultFunctionAttributes(CodeGenOpts, FuncAttrs);
}

/// Apply default attributes to \p F, accounting for merge semantics of
/// attributes that should not overwrite existing attributes.
void CodeGenModule::mergeDefaultFunctionDefinitionAttributes(
llvm::Function &F, bool WillInternalize) {
::mergeDefaultFunctionDefinitionAttributes(F, getCodeGenOpts(), getLangOpts(),
getTarget().getTargetOpts(),
WillInternalize);
}

void CodeGenModule::addDefaultFunctionDefinitionAttributes(
llvm::AttrBuilder &attrs) {
getDefaultFunctionAttributes(/*function name*/ "", /*optnone*/ false,
Expand Down
21 changes: 18 additions & 3 deletions clang/lib/CodeGen/CGCall.h
Original file line number Diff line number Diff line change
Expand Up @@ -395,10 +395,25 @@ class ReturnValueSlot {
bool isExternallyDestructed() const { return IsExternallyDestructed; }
};

/// Helper to add attributes to \p F according to the CodeGenOptions and
/// LangOptions without requiring a CodeGenModule to be constructed.
/// Adds attributes to \p F according to our \p CodeGenOpts and \p LangOpts, as
/// though we had emitted it ourselves. We remove any attributes on F that
/// conflict with the attributes we add here.
///
/// This is useful for adding attrs to bitcode modules that you want to link
/// with but don't control, such as CUDA's libdevice. When linking with such
/// a bitcode library, you might want to set e.g. its functions'
/// "unsafe-fp-math" attribute to match the attr of the functions you're
/// codegen'ing. Otherwise, LLVM will interpret the bitcode module's lack of
/// unsafe-fp-math attrs as tantamount to unsafe-fp-math=false, and then LLVM
/// will propagate unsafe-fp-math=false up to every transitive caller of a
/// function in the bitcode library!
///
/// With the exception of fast-math attrs, this will only make the attributes
/// on the function more conservative. But it's unsafe to call this on a
/// function which relies on particular fast-math attributes for correctness.
/// It's up to you to ensure that this is safe.
void mergeDefaultFunctionDefinitionAttributes(llvm::Function &F,
const CodeGenOptions CodeGenOpts,
const CodeGenOptions &CodeGenOpts,
const LangOptions &LangOpts,
const TargetOptions &TargetOpts,
bool WillInternalize);
Expand Down
20 changes: 0 additions & 20 deletions clang/lib/CodeGen/CodeGenModule.h
Original file line number Diff line number Diff line change
Expand Up @@ -1259,26 +1259,6 @@ class CodeGenModule : public CodeGenTypeCache {
llvm::AttributeList &Attrs, unsigned &CallingConv,
bool AttrOnCallSite, bool IsThunk);

/// Adds attributes to F according to our CodeGenOptions and LangOptions, as
/// though we had emitted it ourselves. We remove any attributes on F that
/// conflict with the attributes we add here.
///
/// This is useful for adding attrs to bitcode modules that you want to link
/// with but don't control, such as CUDA's libdevice. When linking with such
/// a bitcode library, you might want to set e.g. its functions'
/// "unsafe-fp-math" attribute to match the attr of the functions you're
/// codegen'ing. Otherwise, LLVM will interpret the bitcode module's lack of
/// unsafe-fp-math attrs as tantamount to unsafe-fp-math=false, and then LLVM
/// will propagate unsafe-fp-math=false up to every transitive caller of a
/// function in the bitcode library!
///
/// With the exception of fast-math attrs, this will only make the attributes
/// on the function more conservative. But it's unsafe to call this on a
/// function which relies on particular fast-math attributes for correctness.
/// It's up to you to ensure that this is safe.
void mergeDefaultFunctionDefinitionAttributes(llvm::Function &F,
bool WillInternalize);

/// Like the overload taking a `Function &`, but intended specifically
/// for frontends that want to build on Clang's target-configuration logic.
void addDefaultFunctionDefinitionAttributes(llvm::AttrBuilder &attrs);
Expand Down

0 comments on commit 19550e7

Please sign in to comment.