Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions clang/include/clang/Basic/CodeGenOptions.def
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand Down
7 changes: 7 additions & 0 deletions clang/include/clang/Basic/CodeGenOptions.h
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,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;

Expand Down
2 changes: 0 additions & 2 deletions clang/include/clang/Basic/LangOptions.def
Original file line number Diff line number Diff line change
Expand Up @@ -295,8 +295,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")
Expand Down
10 changes: 0 additions & 10 deletions clang/include/clang/Basic/LangOptions.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
6 changes: 3 additions & 3 deletions clang/lib/CodeGen/Targets/SystemZ.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -600,10 +600,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");
}
}
Expand Down
30 changes: 15 additions & 15 deletions clang/lib/Frontend/CompilerInvocation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down Expand Up @@ -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())
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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.
Expand Down