Skip to content

Commit

Permalink
Use function attributes
Browse files Browse the repository at this point in the history
  • Loading branch information
ecnelises committed Jul 10, 2024
1 parent a52e7d5 commit c66d824
Show file tree
Hide file tree
Showing 6 changed files with 22 additions and 34 deletions.
3 changes: 3 additions & 0 deletions clang/lib/CodeGen/CGCall.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2025,6 +2025,9 @@ static void getTrivialDefaultFunctionAttributes(
FuncAttrs.addAttribute(llvm::Attribute::NoUnwind);
}

if (CodeGenOpts.SaveRegParams && !AttrOnCallSite)
FuncAttrs.addAttribute("save-reg-params");

for (StringRef Attr : CodeGenOpts.DefaultFunctionAttrs) {
StringRef Var, Value;
std::tie(Var, Value) = Attr.split('=');
Expand Down
11 changes: 0 additions & 11 deletions clang/lib/CodeGen/Targets/PPC.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -146,10 +146,6 @@ class AIXTargetCodeGenInfo : public TargetCodeGenInfo {

void setTargetAttributes(const Decl *D, llvm::GlobalValue *GV,
CodeGen::CodeGenModule &M) const override;

void emitTargetMetadata(CodeGen::CodeGenModule &CGM,
const llvm::MapVector<GlobalDecl, StringRef>
&MangledDeclNames) const override;
};
} // namespace

Expand Down Expand Up @@ -325,13 +321,6 @@ void AIXTargetCodeGenInfo::setTargetAttributes(
}
}

void AIXTargetCodeGenInfo::emitTargetMetadata(
CodeGen::CodeGenModule &CGM,
const llvm::MapVector<GlobalDecl, StringRef> &MangledDeclNames) const {
if (CGM.getCodeGenOpts().SaveRegParams)
CGM.getModule().addModuleFlag(llvm::Module::Error, "save-reg-params", 1);
}

// PowerPC-32
namespace {
/// PPC32_SVR4_ABIInfo - The 32-bit PowerPC ELF (SVR4) ABI information.
Expand Down
4 changes: 2 additions & 2 deletions clang/test/CodeGen/PowerPC/save-reg-params.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@
void bar(int);
void foo(int x) { bar(x); }

// SAVE: !{i32 1, !"save-reg-params", i32 1}
// NOSAVE-NOT: !{i32 1, !"save-reg-params", i32 1}
// SAVE: attributes #{{[0-9]+}} = { {{.+}} "save-reg-params" {{.+}} }
// NOSAVE-NOT: "save-reg-params"
5 changes: 2 additions & 3 deletions llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2496,9 +2496,8 @@ void PPCAIXAsmPrinter::emitTracebackTable() {

uint32_t GPRSaved = 0;

bool SaveParams =
MF->getFunction().getParent()->getModuleFlag("save-reg-params");
if (SaveParams) {
bool SaveParams = MF->getFunction().hasFnAttribute("save-reg-params");
if (SaveParams && MF->getFunction().isVarArg()) {
// Assuming eight GPRs matches XL behavior for varargs.
GPRSaved = 8;
} else {
Expand Down
3 changes: 1 addition & 2 deletions llvm/lib/Target/PowerPC/PPCISelLowering.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7225,8 +7225,7 @@ SDValue PPCTargetLowering::LowerFormalArguments_AIX(
const unsigned LinkageSize = Subtarget.getFrameLowering()->getLinkageSize();
CCInfo.AllocateStack(LinkageSize, Align(PtrByteSize));
uint64_t SaveStackPos = CCInfo.getStackSize();
bool SaveParams =
MF.getFunction().getParent()->getModuleFlag("save-reg-params");
bool SaveParams = MF.getFunction().hasFnAttribute("save-reg-params");
CCInfo.AnalyzeFormalArguments(Ins, CC_AIX);

SmallVector<SDValue, 8> MemOps;
Expand Down
30 changes: 14 additions & 16 deletions llvm/test/CodeGen/PowerPC/save-reg-params.ll
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
; RUN: llc -verify-machineinstrs -mtriple=powerpc-ibm-aix -mcpu=pwr7 < %s | FileCheck %s -check-prefix=32BIT
; RUN: llc -verify-machineinstrs -mtriple=powerpc64-ibm-aix -mcpu=pwr7 < %s | FileCheck %s -check-prefix=64BIT

define void @i64_join(i64 %a, i64 %b, i64 %c, i64 %d, i64 %e, i64 %f, i64 %g, i64 %h, i64 %i, i64 %j) {
define void @i64_join(i64 %a, i64 %b, i64 %c, i64 %d, i64 %e, i64 %f, i64 %g, i64 %h, i64 %i, i64 %j) #0 {
; 32BIT-LABEL: i64_join:
; 32BIT: # %bb.0: # %entry
; 32BIT-NEXT: mflr 0
Expand Down Expand Up @@ -56,7 +56,7 @@ entry:
ret void
}

define void @i64_join_missing(i64 %a, i64 %b, i64 %c, i64 %d, i64 %e, i64 %f, i64 %g, i64 %h, i64 %i, i64 %j) {
define void @i64_join_missing(i64 %a, i64 %b, i64 %c, i64 %d, i64 %e, i64 %f, i64 %g, i64 %h, i64 %i, i64 %j) #0 {
; 32BIT-LABEL: i64_join_missing:
; 32BIT: # %bb.0: # %entry
; 32BIT-NEXT: mflr 0
Expand Down Expand Up @@ -109,7 +109,7 @@ entry:
ret void
}

define void @i32_join(i32 signext %a, i32 signext %b, i32 signext %c, i32 signext %d, i32 signext %e, i32 signext %f, i32 signext %g, i32 signext %h, i32 signext %i, i32 signext %j) {
define void @i32_join(i32 signext %a, i32 signext %b, i32 signext %c, i32 signext %d, i32 signext %e, i32 signext %f, i32 signext %g, i32 signext %h, i32 signext %i, i32 signext %j) #0 {
; 32BIT-LABEL: i32_join:
; 32BIT: # %bb.0: # %entry
; 32BIT-NEXT: mflr 0
Expand Down Expand Up @@ -163,7 +163,7 @@ entry:
ret void
}

define void @i32_join_missing(i32 signext %a, i32 signext %b, i32 signext %c, i32 signext %d, i32 signext %e, i32 signext %f, i32 signext %g, i32 signext %h, i32 signext %i, i32 signext %j) {
define void @i32_join_missing(i32 signext %a, i32 signext %b, i32 signext %c, i32 signext %d, i32 signext %e, i32 signext %f, i32 signext %g, i32 signext %h, i32 signext %i, i32 signext %j) #0 {
; 32BIT-LABEL: i32_join_missing:
; 32BIT: # %bb.0: # %entry
; 32BIT-NEXT: mflr 0
Expand Down Expand Up @@ -216,7 +216,7 @@ entry:
ret void
}

define void @f32_join(float %a, float %b, float %c, float %d, float %e, float %f, float %g, float %h, float %i, float %j) {
define void @f32_join(float %a, float %b, float %c, float %d, float %e, float %f, float %g, float %h, float %i, float %j) #0 {
; 32BIT-LABEL: f32_join:
; 32BIT: # %bb.0: # %entry
; 32BIT-NEXT: mflr 0
Expand Down Expand Up @@ -274,7 +274,7 @@ entry:
ret void
}

define void @f32_join_missing(float %a, float %b, float %c, float %d, float %e, float %f, float %g, float %h, float %i, float %j) {
define void @f32_join_missing(float %a, float %b, float %c, float %d, float %e, float %f, float %g, float %h, float %i, float %j) #0 {
; 32BIT-LABEL: f32_join_missing:
; 32BIT: # %bb.0: # %entry
; 32BIT-NEXT: mflr 0
Expand Down Expand Up @@ -332,7 +332,7 @@ entry:
ret void
}

define void @f64_join(double %a, double %b, double %c, double %d, double %e, double %f, double %g, double %h, double %i, double %j) {
define void @f64_join(double %a, double %b, double %c, double %d, double %e, double %f, double %g, double %h, double %i, double %j) #0 {
; 32BIT-LABEL: f64_join:
; 32BIT: # %bb.0: # %entry
; 32BIT-NEXT: mflr 0
Expand Down Expand Up @@ -390,7 +390,7 @@ entry:
ret void
}

define void @f64_missing(double %a, double %b, double %c, double %d, double %e, double %f, double %g, double %h, double %i, double %j) {
define void @f64_missing(double %a, double %b, double %c, double %d, double %e, double %f, double %g, double %h, double %i, double %j) #0 {
; 32BIT-LABEL: f64_missing:
; 32BIT: # %bb.0: # %entry
; 32BIT-NEXT: mflr 0
Expand Down Expand Up @@ -448,7 +448,7 @@ entry:
ret void
}

define void @mixed_1(double %a, i64 %b, i64 %c, i32 signext %d, i64 %e, float %f, float %g, double %h, i32 signext %i, double %j) {
define void @mixed_1(double %a, i64 %b, i64 %c, i32 signext %d, i64 %e, float %f, float %g, double %h, i32 signext %i, double %j) #0 {
; 32BIT-LABEL: mixed_1:
; 32BIT: # %bb.0: # %entry
; 32BIT-NEXT: mflr 0
Expand Down Expand Up @@ -587,7 +587,7 @@ entry:
ret void
}

define void @mixed_2(<2 x double> %a, <4 x i32> %b, i64 %c) {
define void @mixed_2(<2 x double> %a, <4 x i32> %b, i64 %c) #0 {
; 32BIT-LABEL: mixed_2:
; 32BIT: # %bb.0: # %entry
; 32BIT-NEXT: mflr 0
Expand Down Expand Up @@ -658,7 +658,7 @@ entry:

%struct.foo = type <{ [3 x i32], double, [12 x i8], <4 x i32> }>

define void @mixed_3(<2 x double> %a, i64 %b, double %c, float %d, i32 signext %e, double %f, ...) {
define void @mixed_3(<2 x double> %a, i64 %b, double %c, float %d, i32 signext %e, double %f, ...) #0 {
; 32BIT-LABEL: mixed_3:
; 32BIT: # %bb.0: # %entry
; 32BIT-NEXT: mflr 0
Expand Down Expand Up @@ -757,7 +757,7 @@ entry:
ret void
}

define signext i32 @mixed_4(ptr byval(%struct.foo) align 16 %foo, i32 %sec) {
define signext i32 @mixed_4(ptr byval(%struct.foo) align 16 %foo, i32 %sec) #0 {
; 32BIT-LABEL: mixed_4:
; 32BIT: # %bb.0: # %entry
; 32BIT-NEXT: stw 9, 48(1)
Expand Down Expand Up @@ -809,7 +809,7 @@ entry:

%struct.bar = type { i8, i32, <4 x i32>, ptr, i8 }

define void @mixed_5(ptr byref(%struct.bar) align 16 %r, ptr byval(%struct.bar) align 16 %x, i32 signext %y, ptr byval(%struct.foo) align 16 %f) {
define void @mixed_5(ptr byref(%struct.bar) align 16 %r, ptr byval(%struct.bar) align 16 %x, i32 signext %y, ptr byval(%struct.foo) align 16 %f) #0 {
; 32BIT-LABEL: mixed_5:
; 32BIT: # %bb.0: # %entry
; 32BIT-NEXT: mflr 0
Expand Down Expand Up @@ -871,6 +871,4 @@ declare void @consume_f32(float)
declare void @consume_i64(i64)
declare void @consume_i32(i32 signext)

!llvm.module.flags = !{!0}

!0 = !{i32 1, !"save-reg-params", i32 1}
attributes #0 = { nofree noinline nounwind "save-reg-params" }

0 comments on commit c66d824

Please sign in to comment.