https://github.com/sujianIBM updated https://github.com/llvm/llvm-project/pull/207416
>From 3189e003a6181f95eecb1d43c3600cc699b32465 Mon Sep 17 00:00:00 2001 From: sujianIBM <[email protected]> Date: Fri, 3 Jul 2026 11:25:51 -0400 Subject: [PATCH 1/8] Add options -m[no-]zos-ppa1-name to remove the function name in PPA1 on z/OS. This PR adds options -m[no-]zos-ppa1-name to remove the function name in PPA1 on z/OS. --- clang/include/clang/Basic/LangOptions.def | 2 + clang/include/clang/Basic/LangOptions.h | 10 ++++ clang/include/clang/Options/Options.td | 7 +++ clang/lib/CodeGen/Targets/SystemZ.cpp | 13 +++++ clang/lib/Driver/ToolChains/ZOS.cpp | 2 + clang/lib/Frontend/CompilerInvocation.cpp | 15 ++++++ clang/test/CodeGen/SystemZ/zos-ppa1-name.c | 19 +++++++ clang/test/Driver/zos-ppa1-name.c | 15 ++++++ llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp | 12 ++++- llvm/test/CodeGen/SystemZ/zos-ppa1.ll | 54 +++++++++++++++++++ 10 files changed, 148 insertions(+), 1 deletion(-) create mode 100644 clang/test/CodeGen/SystemZ/zos-ppa1-name.c create mode 100644 clang/test/Driver/zos-ppa1-name.c diff --git a/clang/include/clang/Basic/LangOptions.def b/clang/include/clang/Basic/LangOptions.def index 1fb491a54a278..ce6be39843f09 100644 --- a/clang/include/clang/Basic/LangOptions.def +++ b/clang/include/clang/Basic/LangOptions.def @@ -296,6 +296,8 @@ LANGOPT(ConstantNSDictionaryLiterals , 1, 0, NotCompatible, "constant dictionary LANGOPT(InlineVisibilityHidden , 1, 0, Benign, "hidden visibility for inline C++ methods") ENUM_LANGOPT(DefaultVisibilityExportMapping, DefaultVisiblityExportMapping, 2, DefaultVisiblityExportMapping::None, Benign, "controls mapping of default visibility to dllexport") LANGOPT(IgnoreXCOFFVisibility, 1, 0, Benign, "All the visibility attributes that are specified in the source code are ignored in aix XCOFF.") +ENUM_LANGOPT(ZOSPPA1Name, ZOSPPA1NameKind, 2, ZOSPPA1NameKind::Default, Benign, + "Emit the function name in PPA1 on z/OS.") LANGOPT(VisibilityInlinesHiddenStaticLocalVar, 1, 0, Benign, "hidden visibility for static local variables in inline C++ " "methods when -fvisibility-inlines hidden is enabled") diff --git a/clang/include/clang/Basic/LangOptions.h b/clang/include/clang/Basic/LangOptions.h index f21131622d03d..1e8ba38df3c53 100644 --- a/clang/include/clang/Basic/LangOptions.h +++ b/clang/include/clang/Basic/LangOptions.h @@ -451,6 +451,16 @@ class LangOptionsBase { Microsoft = 2, }; + enum class ZOSPPA1NameKind { + /// Optimization for size level decides whether to emit the function name + /// in PPA1 on z/OS. + Default, + /// Emit the function name in PPA1 on z/OS. + Emit, + /// Do not emit the function name in PPA1 on z/OS. + NoEmit, + }; + // Define simple language options (with no accessors). #define LANGOPT(Name, Bits, Default, Compatibility, Description) \ unsigned Name : Bits; diff --git a/clang/include/clang/Options/Options.td b/clang/include/clang/Options/Options.td index f86323ad2d6bd..cdbcfb30ba772 100644 --- a/clang/include/clang/Options/Options.td +++ b/clang/include/clang/Options/Options.td @@ -6093,6 +6093,13 @@ defm backchain : BoolMOption<"backchain", PosFlag<SetTrue, [], [ClangOption], "Link stack frames through backchain on System Z">, NegFlag<SetFalse>, BothFlags<[], [ClangOption, CC1Option]>>; +def mzos_ppa1_name : Flag<["-"], "mzos-ppa1-name">, Group<m_Group>, + Flags<[TargetSpecific]>, Visibility<[ClangOption, CC1Option]>, + HelpText<"Emit the function name in PPA1 on z/OS">; +def mno_zos_ppa1_name : Flag<["-"], "mno-zos-ppa1-name">, Group<m_Group>, + Flags<[TargetSpecific]>, Visibility<[ClangOption, CC1Option]>, + HelpText<"Do not emit the function name in PPA1 on z/OS">; + def mno_warn_nonportable_cfstrings : Flag<["-"], "mno-warn-nonportable-cfstrings">, Group<m_Group>; def mno_omit_leaf_frame_pointer : Flag<["-"], "mno-omit-leaf-frame-pointer">, Group<m_Group>; def momit_leaf_frame_pointer : Flag<["-"], "momit-leaf-frame-pointer">, Group<m_Group>, diff --git a/clang/lib/CodeGen/Targets/SystemZ.cpp b/clang/lib/CodeGen/Targets/SystemZ.cpp index a27fee633ead2..bcee3078fe06f 100644 --- a/clang/lib/CodeGen/Targets/SystemZ.cpp +++ b/clang/lib/CodeGen/Targets/SystemZ.cpp @@ -598,6 +598,19 @@ class ZOSXPLinkTargetCodeGenInfo : public TargetCodeGenInfo { SwiftInfo = std::make_unique<SwiftABIInfo>(CGT, /*SwiftErrorInRegister=*/false); } + + void setTargetAttributes(const Decl *D, llvm::GlobalValue *GV, + CodeGen::CodeGenModule &M) const override { + if (dyn_cast_or_null<FunctionDecl>(D)) { + if (auto *Fn = dyn_cast<llvm::Function>(GV)) { + auto ZOSPPA1Name = M.getLangOpts().getZOSPPA1Name(); + if (ZOSPPA1Name == clang::LangOptions::ZOSPPA1NameKind::Emit) + Fn->addFnAttr("zos-ppa1-name", "all"); + else if (ZOSPPA1Name == clang::LangOptions::ZOSPPA1NameKind::NoEmit) + Fn->addFnAttr("zos-ppa1-name", "none"); + } + } + } }; } // namespace diff --git a/clang/lib/Driver/ToolChains/ZOS.cpp b/clang/lib/Driver/ToolChains/ZOS.cpp index da4aaa28cd1da..bc4ff08e6e2c6 100644 --- a/clang/lib/Driver/ToolChains/ZOS.cpp +++ b/clang/lib/Driver/ToolChains/ZOS.cpp @@ -49,6 +49,8 @@ void ZOS::addClangTargetOptions(const ArgList &DriverArgs, if (!DriverArgs.hasArgNoClaim(options::OPT_fsized_deallocation, options::OPT_fno_sized_deallocation)) CC1Args.push_back("-fno-sized-deallocation"); + + DriverArgs.AddLastArg(CC1Args, options::OPT_mzos_ppa1_name, options::OPT_mno_zos_ppa1_name); } void zos::Assembler::ConstructJob(Compilation &C, const JobAction &JA, diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index 6545307a8c8a7..75f0be4fd12f7 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -3822,6 +3822,11 @@ void CompilerInvocationBase::GenerateLangArgs(const LangOptions &Opts, if (Opts.IgnoreXCOFFVisibility) GenerateArg(Consumer, OPT_mignore_xcoff_visibility); + if (Opts.getZOSPPA1Name() == LangOptions::ZOSPPA1NameKind::Emit) + GenerateArg(Consumer, OPT_mzos_ppa1_name); + else if (Opts.getZOSPPA1Name() == LangOptions::ZOSPPA1NameKind::NoEmit) + GenerateArg(Consumer, OPT_mno_zos_ppa1_name); + if (Opts.SignedOverflowBehavior == LangOptions::SOB_Trapping) { GenerateArg(Consumer, OPT_ftrapv); GenerateArg(Consumer, OPT_ftrapv_handler, Opts.OverflowHandler); @@ -4241,6 +4246,16 @@ bool CompilerInvocation::ParseLangArgs(LangOptions &Opts, ArgList &Args, if (T.isOSAIX() && (Args.hasArg(OPT_mignore_xcoff_visibility))) Opts.IgnoreXCOFFVisibility = 1; + if (T.isOSzOS()) { + if (const Arg *A = Args.getLastArg(OPT_mzos_ppa1_name, + OPT_mno_zos_ppa1_name)) { + if (A->getOption().matches(OPT_mzos_ppa1_name)) + Opts.setZOSPPA1Name(LangOptions::ZOSPPA1NameKind::Emit); + else + Opts.setZOSPPA1Name(LangOptions::ZOSPPA1NameKind::NoEmit); + } + } + if (Args.hasArg(OPT_ftrapv)) { Opts.setSignedOverflowBehavior(LangOptions::SOB_Trapping); // Set the handler, if one is specified. diff --git a/clang/test/CodeGen/SystemZ/zos-ppa1-name.c b/clang/test/CodeGen/SystemZ/zos-ppa1-name.c new file mode 100644 index 0000000000000..e49c6ae7a20ca --- /dev/null +++ b/clang/test/CodeGen/SystemZ/zos-ppa1-name.c @@ -0,0 +1,19 @@ +// REQUIRES: systemz-registered-target + +// test default +// RUN: %clang_cc1 -triple s390x-ibm-zos -emit-llvm %s -o -\ +// RUN: | FileCheck %s -check-prefix=DEFAULT + +// test the positive and negative options +// RUN: %clang_cc1 -triple s390x-ibm-zos -mzos-ppa1-name -emit-llvm %s -o -\ +// RUN: | FileCheck %s -check-prefix=EMIT-NAME +// RUN: %clang_cc1 -triple s390x-ibm-zos -mno-zos-ppa1-name -emit-llvm %s -o -\ +// RUN: | FileCheck %s -check-prefix=NOT-EMIT-NAME + +// DEFAULT-NOT: attributes #0 = {{{.*}}"zos-ppa1-name"{{.*}}} +// EMIT-NAME: attributes #0 = {{{.*}}"zos-ppa1-name"="all"{{.*}}} +// NOT-EMIT-NAME: attributes #0 = {{{.*}}"zos-ppa1-name"="none"{{.*}}} + +int main() { + return 0; +} diff --git a/clang/test/Driver/zos-ppa1-name.c b/clang/test/Driver/zos-ppa1-name.c new file mode 100644 index 0000000000000..a5a1f9ca2486e --- /dev/null +++ b/clang/test/Driver/zos-ppa1-name.c @@ -0,0 +1,15 @@ +// REQUIRES: systemz-registered-target + +// RUN: %clang -### -target s390x-ibm-zos -mzos-ppa1-name -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=EMIT-NAME %s +// EMIT-NAME: "-mzos-ppa1-name" + +// RUN: %clang -### -target s390x-ibm-zos -mno-zos-ppa1-name -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=NOT-EMIT-NAME %s +// NOT-EMIT-NAME: "-mno-zos-ppa1-name" + +// RUN: not %clang -target systemz-unknown-elf -mzos-ppa1-name -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=ERR %s +// RUN: not %clang -target systemz-unknown-elf -mno-zos-ppa1-name -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=ERR %s +// ERR: error: unsupported option '-m{{.*}}zos-ppa1-name' for target 'systemz-unknown-elf' diff --git a/llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp b/llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp index a90df8e1e0568..bcabec73f0eb5 100644 --- a/llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp +++ b/llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp @@ -1866,7 +1866,17 @@ void SystemZAsmPrinter::calculatePPA1() { determinePrologueStackUpdateSym(MF, EndOfPrologSym, StackUpdateSym); // Save the calculated values. - if (MF->getFunction().hasName()) + // Whether to emit the function name is decided by optimization level, + // unless it is explicitly required via -m[no-]zos-ppa1-name options. + bool IncludeFunctionName = !MF->getFunction().hasMinSize(); + if (MF->getFunction().hasFnAttribute("zos-ppa1-name")) { + auto ZOSPPA1Name = + MF->getFunction().getFnAttribute("zos-ppa1-name").getValueAsString(); + assert((ZOSPPA1Name == "all" || ZOSPPA1Name == "none") && + "Invalid value for attribute zos-ppa1-name."); + IncludeFunctionName = ZOSPPA1Name == "all"; + } + if (MF->getFunction().hasName() && IncludeFunctionName) Info.Name = MF->getFunction().getName(); Info.PPA1 = OutContext.createTempSymbol(Twine("PPA1_").concat(N), true); Info.EPMarker = OutContext.createTempSymbol(Twine("EPM_").concat(N), true); diff --git a/llvm/test/CodeGen/SystemZ/zos-ppa1.ll b/llvm/test/CodeGen/SystemZ/zos-ppa1.ll index 570159feb9045..49fe981f65980 100644 --- a/llvm/test/CodeGen/SystemZ/zos-ppa1.ll +++ b/llvm/test/CodeGen/SystemZ/zos-ppa1.ll @@ -206,3 +206,57 @@ declare i32 @other(ptr, i32) ; CHECK-NEXT: * Name of Function ; CHECK-NEXT: DC XL10'A689A388819393968381' ; CHECK-NEXT: DC AD(L#EPM_withalloca_0-L#PPA1_withalloca_0) + +; Attribute "zos-ppa1-name"="none" removes the function name from PPA1. +; CHECK: * PPA1 +; CHECK-NEXT: L#PPA1_void_test_no_name_0 DS 0H +; CHECK: * PPA1 Flags 4 +; CHECK-NEXT: DC XL1'80' +; CHECK-NEXT: * Length/4 of Parms +; CHECK-NEXT: DC XL2'0000' +; CHECK-NEXT: * Length of Code +; CHECK-NEXT: DC AD(L#void_test_no_name_end_0-L#EPM_void_test_no_name_0) +; CHECK-NEXT: DC AD(L#EPM_void_test_no_name_0-L#PPA1_void_test_no_name_0) +define void @void_test_no_name() #0 { +entry: + ret void +} +attributes #0 = { "zos-ppa1-name"="none" } + +; Attribute minsize removes the function name from PPA1. +; CHECK: * PPA1 +; CHECK-NEXT: L#PPA1_void_test_minsize_0 DS 0H +; CHECK: * PPA1 Flags 4 +; CHECK-NEXT: DC XL1'80' +; CHECK-NEXT: * Length/4 of Parms +; CHECK-NEXT: DC XL2'0000' +; CHECK-NEXT: * Length of Code +; CHECK-NEXT: DC AD(L#void_test_minsize_end_0-L#EPM_void_test_minsize_0) +; CHECK-NEXT: DC AD(L#EPM_void_test_minsize_0-L#PPA1_void_test_minsize_0) +define void @void_test_minsize() #1 { +entry: + ret void +} +attributes #1 = { minsize } + +; Attribute "zos-ppa1-name"="all" takes precedence over minsize, +; and thus emits the function name in PPA1. +; CHECK: * PPA1 +; CHECK-NEXT: L#PPA1_void_test_name_0 DS 0H +; CHECK: * PPA1 Flags 4 +; CHECK-NEXT: * Bit 7: 1 = Name Length and Name +; CHECK-NEXT: DC XL1'81' +; CHECK-NEXT: * Length/4 of Parms +; CHECK-NEXT: DC XL2'0000' +; CHECK-NEXT: * Length of Code +; CHECK-NEXT: DC AD(L#void_test_name_end_0-L#EPM_void_test_name_0) +; CHECK-NEXT: * Length of Name +; CHECK-NEXT: DC XL2'000E' +; CHECK-NEXT: * Name of Function +; CHECK-NEXT: DC XL14'A59689846DA385A2A36D95819485' +; CHECK-NEXT: DC AD(L#EPM_void_test_name_0-L#PPA1_void_test_name_0) +define void @void_test_name() #2 { +entry: + ret void +} +attributes #2 = { "zos-ppa1-name"="all" minsize } >From f836019be85c5ce8723a6a8810daad7605fd8c56 Mon Sep 17 00:00:00 2001 From: sujianIBM <[email protected]> Date: Fri, 3 Jul 2026 15:39:02 +0000 Subject: [PATCH 2/8] Fix format --- clang/lib/Driver/ToolChains/ZOS.cpp | 3 ++- clang/lib/Frontend/CompilerInvocation.cpp | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/clang/lib/Driver/ToolChains/ZOS.cpp b/clang/lib/Driver/ToolChains/ZOS.cpp index bc4ff08e6e2c6..107f150fa8274 100644 --- a/clang/lib/Driver/ToolChains/ZOS.cpp +++ b/clang/lib/Driver/ToolChains/ZOS.cpp @@ -50,7 +50,8 @@ void ZOS::addClangTargetOptions(const ArgList &DriverArgs, options::OPT_fno_sized_deallocation)) CC1Args.push_back("-fno-sized-deallocation"); - DriverArgs.AddLastArg(CC1Args, options::OPT_mzos_ppa1_name, options::OPT_mno_zos_ppa1_name); + DriverArgs.AddLastArg(CC1Args, options::OPT_mzos_ppa1_name, + options::OPT_mno_zos_ppa1_name); } void zos::Assembler::ConstructJob(Compilation &C, const JobAction &JA, diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index 75f0be4fd12f7..73d1ec9b9a7d8 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -4247,8 +4247,8 @@ bool CompilerInvocation::ParseLangArgs(LangOptions &Opts, ArgList &Args, Opts.IgnoreXCOFFVisibility = 1; if (T.isOSzOS()) { - if (const Arg *A = Args.getLastArg(OPT_mzos_ppa1_name, - OPT_mno_zos_ppa1_name)) { + if (const Arg *A = + Args.getLastArg(OPT_mzos_ppa1_name, OPT_mno_zos_ppa1_name)) { if (A->getOption().matches(OPT_mzos_ppa1_name)) Opts.setZOSPPA1Name(LangOptions::ZOSPPA1NameKind::Emit); else >From 05b4741e5d151034c7f6e12d764d98bef5d47d72 Mon Sep 17 00:00:00 2001 From: sujianIBM <[email protected]> Date: Mon, 6 Jul 2026 16:11:19 -0400 Subject: [PATCH 3/8] Move ZOSPPA1Name from LangOptions to CodeGenOptions. --- clang/include/clang/Basic/CodeGenOptions.def | 4 +++ clang/include/clang/Basic/CodeGenOptions.h | 7 +++++ clang/include/clang/Basic/LangOptions.def | 2 -- clang/include/clang/Basic/LangOptions.h | 10 ------- clang/lib/CodeGen/Targets/SystemZ.cpp | 6 ++-- clang/lib/Frontend/CompilerInvocation.cpp | 30 ++++++++++---------- 6 files changed, 29 insertions(+), 30 deletions(-) diff --git a/clang/include/clang/Basic/CodeGenOptions.def b/clang/include/clang/Basic/CodeGenOptions.def index bcb47169403d8..3b68d4fc00266 100644 --- a/clang/include/clang/Basic/CodeGenOptions.def +++ b/clang/include/clang/Basic/CodeGenOptions.def @@ -536,6 +536,10 @@ ENUM_CODEGENOPT(WinControlFlowGuardMechanism, ControlFlowGuardMechanism, /// Adds attributes that prevent outlining (`-mno-outline`) CODEGENOPT(DisableOutlining, 1, 0, Benign) +/// Controlls the emission of function name in PPA1 on z/OS. +ENUM_CODEGENOPT(ZOSPPA1Name, ZOSPPA1NameKind, + 2, ZOSPPA1NameKind::Default, Benign) + /// FIXME: Make DebugOptions its own top-level .def file. #include "DebugOptions.def" diff --git a/clang/include/clang/Basic/CodeGenOptions.h b/clang/include/clang/Basic/CodeGenOptions.h index c12434135a198..569ae9f74950c 100644 --- a/clang/include/clang/Basic/CodeGenOptions.h +++ b/clang/include/clang/Basic/CodeGenOptions.h @@ -240,6 +240,13 @@ class CodeGenOptions : public CodeGenOptionsBase { NonStrictDefault = NonZero }; + enum class ZOSPPA1NameKind { + Default, /// Optimization for size level decides whether to + /// emit the function name in PPA1 on z/OS. + Emit, /// Emit the function name in PPA1 on z/OS. + NoEmit, /// Do not emit the function name in PPA1 on z/OS. + }; + /// The code model to use (-mcmodel). std::string CodeModel; diff --git a/clang/include/clang/Basic/LangOptions.def b/clang/include/clang/Basic/LangOptions.def index ce6be39843f09..1fb491a54a278 100644 --- a/clang/include/clang/Basic/LangOptions.def +++ b/clang/include/clang/Basic/LangOptions.def @@ -296,8 +296,6 @@ LANGOPT(ConstantNSDictionaryLiterals , 1, 0, NotCompatible, "constant dictionary LANGOPT(InlineVisibilityHidden , 1, 0, Benign, "hidden visibility for inline C++ methods") ENUM_LANGOPT(DefaultVisibilityExportMapping, DefaultVisiblityExportMapping, 2, DefaultVisiblityExportMapping::None, Benign, "controls mapping of default visibility to dllexport") LANGOPT(IgnoreXCOFFVisibility, 1, 0, Benign, "All the visibility attributes that are specified in the source code are ignored in aix XCOFF.") -ENUM_LANGOPT(ZOSPPA1Name, ZOSPPA1NameKind, 2, ZOSPPA1NameKind::Default, Benign, - "Emit the function name in PPA1 on z/OS.") LANGOPT(VisibilityInlinesHiddenStaticLocalVar, 1, 0, Benign, "hidden visibility for static local variables in inline C++ " "methods when -fvisibility-inlines hidden is enabled") diff --git a/clang/include/clang/Basic/LangOptions.h b/clang/include/clang/Basic/LangOptions.h index 1e8ba38df3c53..f21131622d03d 100644 --- a/clang/include/clang/Basic/LangOptions.h +++ b/clang/include/clang/Basic/LangOptions.h @@ -451,16 +451,6 @@ class LangOptionsBase { Microsoft = 2, }; - enum class ZOSPPA1NameKind { - /// Optimization for size level decides whether to emit the function name - /// in PPA1 on z/OS. - Default, - /// Emit the function name in PPA1 on z/OS. - Emit, - /// Do not emit the function name in PPA1 on z/OS. - NoEmit, - }; - // Define simple language options (with no accessors). #define LANGOPT(Name, Bits, Default, Compatibility, Description) \ unsigned Name : Bits; diff --git a/clang/lib/CodeGen/Targets/SystemZ.cpp b/clang/lib/CodeGen/Targets/SystemZ.cpp index bcee3078fe06f..d64a42077a39a 100644 --- a/clang/lib/CodeGen/Targets/SystemZ.cpp +++ b/clang/lib/CodeGen/Targets/SystemZ.cpp @@ -603,10 +603,10 @@ class ZOSXPLinkTargetCodeGenInfo : public TargetCodeGenInfo { CodeGen::CodeGenModule &M) const override { if (dyn_cast_or_null<FunctionDecl>(D)) { if (auto *Fn = dyn_cast<llvm::Function>(GV)) { - auto ZOSPPA1Name = M.getLangOpts().getZOSPPA1Name(); - if (ZOSPPA1Name == clang::LangOptions::ZOSPPA1NameKind::Emit) + auto ZOSPPA1Name = M.getCodeGenOpts().getZOSPPA1Name(); + if (ZOSPPA1Name == clang::CodeGenOptions::ZOSPPA1NameKind::Emit) Fn->addFnAttr("zos-ppa1-name", "all"); - else if (ZOSPPA1Name == clang::LangOptions::ZOSPPA1NameKind::NoEmit) + else if (ZOSPPA1Name == clang::CodeGenOptions::ZOSPPA1NameKind::NoEmit) Fn->addFnAttr("zos-ppa1-name", "none"); } } diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index 73d1ec9b9a7d8..b3f3f174c0250 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -1766,6 +1766,11 @@ void CompilerInvocationBase::GenerateCodeGenArgs(const CodeGenOptions &Opts, if (Opts.XCOFFReadOnlyPointers) GenerateArg(Consumer, OPT_mxcoff_roptr); + if (Opts.getZOSPPA1Name() == CodeGenOptions::ZOSPPA1NameKind::Emit) + GenerateArg(Consumer, OPT_mzos_ppa1_name); + else if (Opts.getZOSPPA1Name() == CodeGenOptions::ZOSPPA1NameKind::NoEmit) + GenerateArg(Consumer, OPT_mno_zos_ppa1_name); + if (!Opts.OptRecordPasses.empty()) GenerateArg(Consumer, OPT_opt_record_passes, Opts.OptRecordPasses); @@ -2193,6 +2198,16 @@ bool CompilerInvocation::ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, << A->getSpelling() << T.str(); } + if (T.isOSzOS()) { + if (const Arg *A = + Args.getLastArg(OPT_mzos_ppa1_name, OPT_mno_zos_ppa1_name)) { + if (A->getOption().matches(OPT_mzos_ppa1_name)) + Opts.setZOSPPA1Name(CodeGenOptions::ZOSPPA1NameKind::Emit); + else + Opts.setZOSPPA1Name(CodeGenOptions::ZOSPPA1NameKind::NoEmit); + } + } + bool NeedLocTracking = false; if (!Opts.OptRecordFile.empty()) @@ -3822,11 +3837,6 @@ void CompilerInvocationBase::GenerateLangArgs(const LangOptions &Opts, if (Opts.IgnoreXCOFFVisibility) GenerateArg(Consumer, OPT_mignore_xcoff_visibility); - if (Opts.getZOSPPA1Name() == LangOptions::ZOSPPA1NameKind::Emit) - GenerateArg(Consumer, OPT_mzos_ppa1_name); - else if (Opts.getZOSPPA1Name() == LangOptions::ZOSPPA1NameKind::NoEmit) - GenerateArg(Consumer, OPT_mno_zos_ppa1_name); - if (Opts.SignedOverflowBehavior == LangOptions::SOB_Trapping) { GenerateArg(Consumer, OPT_ftrapv); GenerateArg(Consumer, OPT_ftrapv_handler, Opts.OverflowHandler); @@ -4246,16 +4256,6 @@ bool CompilerInvocation::ParseLangArgs(LangOptions &Opts, ArgList &Args, if (T.isOSAIX() && (Args.hasArg(OPT_mignore_xcoff_visibility))) Opts.IgnoreXCOFFVisibility = 1; - if (T.isOSzOS()) { - if (const Arg *A = - Args.getLastArg(OPT_mzos_ppa1_name, OPT_mno_zos_ppa1_name)) { - if (A->getOption().matches(OPT_mzos_ppa1_name)) - Opts.setZOSPPA1Name(LangOptions::ZOSPPA1NameKind::Emit); - else - Opts.setZOSPPA1Name(LangOptions::ZOSPPA1NameKind::NoEmit); - } - } - if (Args.hasArg(OPT_ftrapv)) { Opts.setSignedOverflowBehavior(LangOptions::SOB_Trapping); // Set the handler, if one is specified. >From 23f853f41b6762b114153c51bff4b55fd8a7aebf Mon Sep 17 00:00:00 2001 From: sujianIBM <[email protected]> Date: Thu, 9 Jul 2026 17:42:02 +0000 Subject: [PATCH 4/8] Use marshalling in option handling and some other small changes. --- clang/include/clang/Basic/CodeGenOptions.def | 3 +- clang/include/clang/Basic/CodeGenOptions.h | 7 ---- clang/include/clang/Options/Options.td | 11 +++--- clang/lib/CodeGen/CodeGenFunction.cpp | 3 ++ clang/lib/CodeGen/Targets/SystemZ.cpp | 13 ------- clang/lib/Driver/ToolChains/Clang.cpp | 9 +++++ clang/lib/Driver/ToolChains/ZOS.cpp | 3 -- clang/lib/Frontend/CompilerInvocation.cpp | 16 +------- clang/test/CodeGen/SystemZ/zos-ppa1-name.c | 11 +++--- llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp | 14 ++----- llvm/test/CodeGen/SystemZ/zos-ppa1.ll | 38 ------------------- 11 files changed, 28 insertions(+), 100 deletions(-) diff --git a/clang/include/clang/Basic/CodeGenOptions.def b/clang/include/clang/Basic/CodeGenOptions.def index 3b68d4fc00266..7e54e75752f39 100644 --- a/clang/include/clang/Basic/CodeGenOptions.def +++ b/clang/include/clang/Basic/CodeGenOptions.def @@ -537,8 +537,7 @@ ENUM_CODEGENOPT(WinControlFlowGuardMechanism, ControlFlowGuardMechanism, CODEGENOPT(DisableOutlining, 1, 0, Benign) /// Controlls the emission of function name in PPA1 on z/OS. -ENUM_CODEGENOPT(ZOSPPA1Name, ZOSPPA1NameKind, - 2, ZOSPPA1NameKind::Default, Benign) +CODEGENOPT(ZOSPPA1Name, 1, 1, Benign) /// FIXME: Make DebugOptions its own top-level .def file. #include "DebugOptions.def" diff --git a/clang/include/clang/Basic/CodeGenOptions.h b/clang/include/clang/Basic/CodeGenOptions.h index 569ae9f74950c..c12434135a198 100644 --- a/clang/include/clang/Basic/CodeGenOptions.h +++ b/clang/include/clang/Basic/CodeGenOptions.h @@ -240,13 +240,6 @@ class CodeGenOptions : public CodeGenOptionsBase { NonStrictDefault = NonZero }; - enum class ZOSPPA1NameKind { - Default, /// Optimization for size level decides whether to - /// emit the function name in PPA1 on z/OS. - Emit, /// Emit the function name in PPA1 on z/OS. - NoEmit, /// Do not emit the function name in PPA1 on z/OS. - }; - /// The code model to use (-mcmodel). std::string CodeModel; diff --git a/clang/include/clang/Options/Options.td b/clang/include/clang/Options/Options.td index cdbcfb30ba772..341909e756cf8 100644 --- a/clang/include/clang/Options/Options.td +++ b/clang/include/clang/Options/Options.td @@ -6093,12 +6093,11 @@ defm backchain : BoolMOption<"backchain", PosFlag<SetTrue, [], [ClangOption], "Link stack frames through backchain on System Z">, NegFlag<SetFalse>, BothFlags<[], [ClangOption, CC1Option]>>; -def mzos_ppa1_name : Flag<["-"], "mzos-ppa1-name">, Group<m_Group>, - Flags<[TargetSpecific]>, Visibility<[ClangOption, CC1Option]>, - HelpText<"Emit the function name in PPA1 on z/OS">; -def mno_zos_ppa1_name : Flag<["-"], "mno-zos-ppa1-name">, Group<m_Group>, - Flags<[TargetSpecific]>, Visibility<[ClangOption, CC1Option]>, - HelpText<"Do not emit the function name in PPA1 on z/OS">; +defm zos_ppa1_name : BoolMOption<"zos-ppa1-name", + CodeGenOpts<"ZOSPPA1Name">, DefaultTrue, + PosFlag<SetTrue, [], [], "Emit the function name in PPA1 on z/OS">, + NegFlag<SetFalse, [], [], "Do not emit the function name in PPA1 on z/OS">, + BothFlags<[], [ClangOption, CC1Option]>>; def mno_warn_nonportable_cfstrings : Flag<["-"], "mno-warn-nonportable-cfstrings">, Group<m_Group>; def mno_omit_leaf_frame_pointer : Flag<["-"], "mno-omit-leaf-frame-pointer">, Group<m_Group>; diff --git a/clang/lib/CodeGen/CodeGenFunction.cpp b/clang/lib/CodeGen/CodeGenFunction.cpp index 80c5268495fe6..4f93e6c3d0ea1 100644 --- a/clang/lib/CodeGen/CodeGenFunction.cpp +++ b/clang/lib/CodeGen/CodeGenFunction.cpp @@ -1203,6 +1203,9 @@ void CodeGenFunction::StartFunction(GlobalDecl GD, QualType RetTy, Fn->addFnAttr("packed-stack"); } + if (!CGM.getCodeGenOpts().ZOSPPA1Name) + Fn->addFnAttr("zos-ppa1-name", "none"); + if (CGM.getCodeGenOpts().WarnStackSize != UINT_MAX && !CGM.getDiags().isIgnored(diag::warn_fe_backend_frame_larger_than, Loc)) Fn->addFnAttr("warn-stack-size", diff --git a/clang/lib/CodeGen/Targets/SystemZ.cpp b/clang/lib/CodeGen/Targets/SystemZ.cpp index d64a42077a39a..a27fee633ead2 100644 --- a/clang/lib/CodeGen/Targets/SystemZ.cpp +++ b/clang/lib/CodeGen/Targets/SystemZ.cpp @@ -598,19 +598,6 @@ class ZOSXPLinkTargetCodeGenInfo : public TargetCodeGenInfo { SwiftInfo = std::make_unique<SwiftABIInfo>(CGT, /*SwiftErrorInRegister=*/false); } - - void setTargetAttributes(const Decl *D, llvm::GlobalValue *GV, - CodeGen::CodeGenModule &M) const override { - if (dyn_cast_or_null<FunctionDecl>(D)) { - if (auto *Fn = dyn_cast<llvm::Function>(GV)) { - auto ZOSPPA1Name = M.getCodeGenOpts().getZOSPPA1Name(); - if (ZOSPPA1Name == clang::CodeGenOptions::ZOSPPA1NameKind::Emit) - Fn->addFnAttr("zos-ppa1-name", "all"); - else if (ZOSPPA1Name == clang::CodeGenOptions::ZOSPPA1NameKind::NoEmit) - Fn->addFnAttr("zos-ppa1-name", "none"); - } - } - } }; } // namespace diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 39eca94556049..08b72254dd939 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -2168,6 +2168,15 @@ void Clang::AddSystemZTargetArgs(const ArgList &Args, CmdArgs.push_back("-mfloat-abi"); CmdArgs.push_back("soft"); } + + if (Arg *A = Args.getLastArg(options::OPT_mzos_ppa1_name, + options::OPT_mno_zos_ppa1_name)) { + if(!Triple.isOSzOS()) + D.Diag(diag::err_drv_unsupported_opt_for_target) + << A->getSpelling() << Triple.str(); + else + CmdArgs.push_back(A->getValue()); + } } void Clang::AddX86TargetArgs(const ArgList &Args, diff --git a/clang/lib/Driver/ToolChains/ZOS.cpp b/clang/lib/Driver/ToolChains/ZOS.cpp index 107f150fa8274..da4aaa28cd1da 100644 --- a/clang/lib/Driver/ToolChains/ZOS.cpp +++ b/clang/lib/Driver/ToolChains/ZOS.cpp @@ -49,9 +49,6 @@ void ZOS::addClangTargetOptions(const ArgList &DriverArgs, if (!DriverArgs.hasArgNoClaim(options::OPT_fsized_deallocation, options::OPT_fno_sized_deallocation)) CC1Args.push_back("-fno-sized-deallocation"); - - DriverArgs.AddLastArg(CC1Args, options::OPT_mzos_ppa1_name, - options::OPT_mno_zos_ppa1_name); } void zos::Assembler::ConstructJob(Compilation &C, const JobAction &JA, diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index b3f3f174c0250..8fd28f5129d22 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -1766,11 +1766,6 @@ void CompilerInvocationBase::GenerateCodeGenArgs(const CodeGenOptions &Opts, if (Opts.XCOFFReadOnlyPointers) GenerateArg(Consumer, OPT_mxcoff_roptr); - if (Opts.getZOSPPA1Name() == CodeGenOptions::ZOSPPA1NameKind::Emit) - GenerateArg(Consumer, OPT_mzos_ppa1_name); - else if (Opts.getZOSPPA1Name() == CodeGenOptions::ZOSPPA1NameKind::NoEmit) - GenerateArg(Consumer, OPT_mno_zos_ppa1_name); - if (!Opts.OptRecordPasses.empty()) GenerateArg(Consumer, OPT_opt_record_passes, Opts.OptRecordPasses); @@ -2198,15 +2193,8 @@ bool CompilerInvocation::ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, << A->getSpelling() << T.str(); } - if (T.isOSzOS()) { - if (const Arg *A = - Args.getLastArg(OPT_mzos_ppa1_name, OPT_mno_zos_ppa1_name)) { - if (A->getOption().matches(OPT_mzos_ppa1_name)) - Opts.setZOSPPA1Name(CodeGenOptions::ZOSPPA1NameKind::Emit); - else - Opts.setZOSPPA1Name(CodeGenOptions::ZOSPPA1NameKind::NoEmit); - } - } + if (!T.isOSzOS() && Args.hasArg(OPT_mzos_ppa1_name, OPT_mno_zos_ppa1_name)) + Opts.ZOSPPA1Name = true; bool NeedLocTracking = false; diff --git a/clang/test/CodeGen/SystemZ/zos-ppa1-name.c b/clang/test/CodeGen/SystemZ/zos-ppa1-name.c index e49c6ae7a20ca..1f5db9b13307d 100644 --- a/clang/test/CodeGen/SystemZ/zos-ppa1-name.c +++ b/clang/test/CodeGen/SystemZ/zos-ppa1-name.c @@ -2,17 +2,16 @@ // test default // RUN: %clang_cc1 -triple s390x-ibm-zos -emit-llvm %s -o -\ -// RUN: | FileCheck %s -check-prefix=DEFAULT +// RUN: | FileCheck %s -check-prefix=EMIT // test the positive and negative options // RUN: %clang_cc1 -triple s390x-ibm-zos -mzos-ppa1-name -emit-llvm %s -o -\ -// RUN: | FileCheck %s -check-prefix=EMIT-NAME +// RUN: | FileCheck %s -check-prefix=EMIT // RUN: %clang_cc1 -triple s390x-ibm-zos -mno-zos-ppa1-name -emit-llvm %s -o -\ -// RUN: | FileCheck %s -check-prefix=NOT-EMIT-NAME +// RUN: | FileCheck %s -check-prefix=NOEMIT -// DEFAULT-NOT: attributes #0 = {{{.*}}"zos-ppa1-name"{{.*}}} -// EMIT-NAME: attributes #0 = {{{.*}}"zos-ppa1-name"="all"{{.*}}} -// NOT-EMIT-NAME: attributes #0 = {{{.*}}"zos-ppa1-name"="none"{{.*}}} +// EMIT-NOT: attributes #0 = {{{.*}}"zos-ppa1-name"="none"{{.*}}} +// NOEMIT: attributes #0 = {{{.*}}"zos-ppa1-name"="none"{{.*}}} int main() { return 0; diff --git a/llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp b/llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp index bcabec73f0eb5..5debc44d96a05 100644 --- a/llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp +++ b/llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp @@ -1866,17 +1866,9 @@ void SystemZAsmPrinter::calculatePPA1() { determinePrologueStackUpdateSym(MF, EndOfPrologSym, StackUpdateSym); // Save the calculated values. - // Whether to emit the function name is decided by optimization level, - // unless it is explicitly required via -m[no-]zos-ppa1-name options. - bool IncludeFunctionName = !MF->getFunction().hasMinSize(); - if (MF->getFunction().hasFnAttribute("zos-ppa1-name")) { - auto ZOSPPA1Name = - MF->getFunction().getFnAttribute("zos-ppa1-name").getValueAsString(); - assert((ZOSPPA1Name == "all" || ZOSPPA1Name == "none") && - "Invalid value for attribute zos-ppa1-name."); - IncludeFunctionName = ZOSPPA1Name == "all"; - } - if (MF->getFunction().hasName() && IncludeFunctionName) + if (MF->getFunction().hasName() && + MF->getFunction().getFnAttribute("zos-ppa1-name").getValueAsString() + != "none") Info.Name = MF->getFunction().getName(); Info.PPA1 = OutContext.createTempSymbol(Twine("PPA1_").concat(N), true); Info.EPMarker = OutContext.createTempSymbol(Twine("EPM_").concat(N), true); diff --git a/llvm/test/CodeGen/SystemZ/zos-ppa1.ll b/llvm/test/CodeGen/SystemZ/zos-ppa1.ll index 49fe981f65980..17e36db6b7847 100644 --- a/llvm/test/CodeGen/SystemZ/zos-ppa1.ll +++ b/llvm/test/CodeGen/SystemZ/zos-ppa1.ll @@ -222,41 +222,3 @@ entry: ret void } attributes #0 = { "zos-ppa1-name"="none" } - -; Attribute minsize removes the function name from PPA1. -; CHECK: * PPA1 -; CHECK-NEXT: L#PPA1_void_test_minsize_0 DS 0H -; CHECK: * PPA1 Flags 4 -; CHECK-NEXT: DC XL1'80' -; CHECK-NEXT: * Length/4 of Parms -; CHECK-NEXT: DC XL2'0000' -; CHECK-NEXT: * Length of Code -; CHECK-NEXT: DC AD(L#void_test_minsize_end_0-L#EPM_void_test_minsize_0) -; CHECK-NEXT: DC AD(L#EPM_void_test_minsize_0-L#PPA1_void_test_minsize_0) -define void @void_test_minsize() #1 { -entry: - ret void -} -attributes #1 = { minsize } - -; Attribute "zos-ppa1-name"="all" takes precedence over minsize, -; and thus emits the function name in PPA1. -; CHECK: * PPA1 -; CHECK-NEXT: L#PPA1_void_test_name_0 DS 0H -; CHECK: * PPA1 Flags 4 -; CHECK-NEXT: * Bit 7: 1 = Name Length and Name -; CHECK-NEXT: DC XL1'81' -; CHECK-NEXT: * Length/4 of Parms -; CHECK-NEXT: DC XL2'0000' -; CHECK-NEXT: * Length of Code -; CHECK-NEXT: DC AD(L#void_test_name_end_0-L#EPM_void_test_name_0) -; CHECK-NEXT: * Length of Name -; CHECK-NEXT: DC XL2'000E' -; CHECK-NEXT: * Name of Function -; CHECK-NEXT: DC XL14'A59689846DA385A2A36D95819485' -; CHECK-NEXT: DC AD(L#EPM_void_test_name_0-L#PPA1_void_test_name_0) -define void @void_test_name() #2 { -entry: - ret void -} -attributes #2 = { "zos-ppa1-name"="all" minsize } >From 95fa462ca468d7de06d251c971df4578170610e7 Mon Sep 17 00:00:00 2001 From: sujianIBM <[email protected]> Date: Thu, 9 Jul 2026 19:49:25 +0000 Subject: [PATCH 5/8] Use TargetSpecific instead of manually emitting error. --- clang/include/clang/Options/Options.td | 2 +- clang/lib/Driver/ToolChains/Clang.cpp | 11 +++-------- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/clang/include/clang/Options/Options.td b/clang/include/clang/Options/Options.td index 341909e756cf8..77c93db0079d5 100644 --- a/clang/include/clang/Options/Options.td +++ b/clang/include/clang/Options/Options.td @@ -6097,7 +6097,7 @@ defm zos_ppa1_name : BoolMOption<"zos-ppa1-name", CodeGenOpts<"ZOSPPA1Name">, DefaultTrue, PosFlag<SetTrue, [], [], "Emit the function name in PPA1 on z/OS">, NegFlag<SetFalse, [], [], "Do not emit the function name in PPA1 on z/OS">, - BothFlags<[], [ClangOption, CC1Option]>>; + BothFlags<[TargetSpecific], [ClangOption, CC1Option]>>; def mno_warn_nonportable_cfstrings : Flag<["-"], "mno-warn-nonportable-cfstrings">, Group<m_Group>; def mno_omit_leaf_frame_pointer : Flag<["-"], "mno-omit-leaf-frame-pointer">, Group<m_Group>; diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 08b72254dd939..daebc4040a09a 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -2169,14 +2169,9 @@ void Clang::AddSystemZTargetArgs(const ArgList &Args, CmdArgs.push_back("soft"); } - if (Arg *A = Args.getLastArg(options::OPT_mzos_ppa1_name, - options::OPT_mno_zos_ppa1_name)) { - if(!Triple.isOSzOS()) - D.Diag(diag::err_drv_unsupported_opt_for_target) - << A->getSpelling() << Triple.str(); - else - CmdArgs.push_back(A->getValue()); - } + if(Triple.isOSzOS()) + Args.AddLastArg(CmdArgs, options::OPT_mzos_ppa1_name, + options::OPT_mno_zos_ppa1_name); } void Clang::AddX86TargetArgs(const ArgList &Args, >From 00198baa7ebc62909e122a422fd6be5fa34dbf0e Mon Sep 17 00:00:00 2001 From: sujianIBM <[email protected]> Date: Fri, 10 Jul 2026 12:29:37 +0000 Subject: [PATCH 6/8] Remove check of systems for option validation at cc1. --- clang/lib/Frontend/CompilerInvocation.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index 8fd28f5129d22..6545307a8c8a7 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -2193,9 +2193,6 @@ bool CompilerInvocation::ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, << A->getSpelling() << T.str(); } - if (!T.isOSzOS() && Args.hasArg(OPT_mzos_ppa1_name, OPT_mno_zos_ppa1_name)) - Opts.ZOSPPA1Name = true; - bool NeedLocTracking = false; if (!Opts.OptRecordFile.empty()) >From bc6986286915b1b9768f226766d6b7d1773b2781 Mon Sep 17 00:00:00 2001 From: sujianIBM <[email protected]> Date: Fri, 10 Jul 2026 18:00:46 +0000 Subject: [PATCH 7/8] Fix format. --- clang/lib/Driver/ToolChains/Clang.cpp | 2 +- llvm/test/CodeGen/SystemZ/zos-ppa1.ll | 14 ++++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index daebc4040a09a..961906e02639a 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -2169,7 +2169,7 @@ void Clang::AddSystemZTargetArgs(const ArgList &Args, CmdArgs.push_back("soft"); } - if(Triple.isOSzOS()) + if (Triple.isOSzOS()) Args.AddLastArg(CmdArgs, options::OPT_mzos_ppa1_name, options::OPT_mno_zos_ppa1_name); } diff --git a/llvm/test/CodeGen/SystemZ/zos-ppa1.ll b/llvm/test/CodeGen/SystemZ/zos-ppa1.ll index 17e36db6b7847..ef37cf2ed19b5 100644 --- a/llvm/test/CodeGen/SystemZ/zos-ppa1.ll +++ b/llvm/test/CodeGen/SystemZ/zos-ppa1.ll @@ -209,15 +209,21 @@ declare i32 @other(ptr, i32) ; Attribute "zos-ppa1-name"="none" removes the function name from PPA1. ; CHECK: * PPA1 -; CHECK-NEXT: L#PPA1_void_test_no_name_0 DS 0H +; CHECK-NEXT: L#PPA1_no_name_0 DS 0H ; CHECK: * PPA1 Flags 4 ; CHECK-NEXT: DC XL1'80' ; CHECK-NEXT: * Length/4 of Parms ; CHECK-NEXT: DC XL2'0000' +; CHECK-NEXT: * Length/2 of Prolog +; CHECK-NEXT: DC XL1'00' +; CHECK-NEXT: * Alloca Reg + Offset/2 to SP Update +; CHECK-NEXT: * Bit 0-3: Register R0 +; CHECK-NEXT: * Bit 4-8: Offset +; CHECK-NEXT: DC XL1'0' ; CHECK-NEXT: * Length of Code -; CHECK-NEXT: DC AD(L#void_test_no_name_end_0-L#EPM_void_test_no_name_0) -; CHECK-NEXT: DC AD(L#EPM_void_test_no_name_0-L#PPA1_void_test_no_name_0) -define void @void_test_no_name() #0 { +; CHECK-NEXT: DC AD(L#no_name_end_0-L#EPM_no_name_0) +; CHECK-NEXT: DC AD(L#EPM_no_name_0-L#PPA1_no_name_0) +define void @no_name() #0 { entry: ret void } >From 74053b2fc9b16cff2cfc541cc491b732772685f8 Mon Sep 17 00:00:00 2001 From: sujianIBM <[email protected]> Date: Fri, 10 Jul 2026 18:47:40 +0000 Subject: [PATCH 8/8] Fix format. --- llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp b/llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp index 5debc44d96a05..d1f19c27ca4d9 100644 --- a/llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp +++ b/llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp @@ -1867,8 +1867,8 @@ void SystemZAsmPrinter::calculatePPA1() { // Save the calculated values. if (MF->getFunction().hasName() && - MF->getFunction().getFnAttribute("zos-ppa1-name").getValueAsString() - != "none") + MF->getFunction().getFnAttribute("zos-ppa1-name").getValueAsString() != + "none") Info.Name = MF->getFunction().getName(); Info.PPA1 = OutContext.createTempSymbol(Twine("PPA1_").concat(N), true); Info.EPMarker = OutContext.createTempSymbol(Twine("EPM_").concat(N), true); _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
