[clang] f00ffcd - Revert "[Flang] Add code-object-version option (#72638)"
Dominik Adamski via cfe-commits
cfe-commits at lists.llvm.org
Tue Nov 28 11:25:02 PST 2023
Author: Dominik Adamski
Date: 2023-11-28T13:18:46-06:00
New Revision: f00ffcdb58d6db902a8f86b0ce83a03874d113ad
URL: https://github.com/llvm/llvm-project/commit/f00ffcdb58d6db902a8f86b0ce83a03874d113ad
DIFF: https://github.com/llvm/llvm-project/commit/f00ffcdb58d6db902a8f86b0ce83a03874d113ad.diff
LOG: Revert "[Flang] Add code-object-version option (#72638)"
This commit causes test errors on buildbots.
This reverts commit a8ac930b99d93b2a539ada7e566993d148899144.
Added:
Modified:
clang/include/clang/Basic/TargetOptions.h
clang/include/clang/Driver/Options.td
clang/lib/CodeGen/CGBuiltin.cpp
clang/lib/CodeGen/CodeGenModule.cpp
clang/lib/CodeGen/Targets/AMDGPU.cpp
clang/lib/Driver/ToolChains/Flang.cpp
clang/lib/Driver/ToolChains/Flang.h
flang/include/flang/Frontend/CodeGenOptions.h
flang/lib/Frontend/CompilerInvocation.cpp
flang/lib/Frontend/FrontendActions.cpp
flang/test/Driver/driver-help-hidden.f90
flang/test/Driver/driver-help.f90
llvm/include/llvm/Target/TargetOptions.h
Removed:
flang/test/Driver/code-object-version.f90
flang/test/Lower/AMD/code-object-version.f90
################################################################################
diff --git a/clang/include/clang/Basic/TargetOptions.h b/clang/include/clang/Basic/TargetOptions.h
index 2049f03b28893fd..ba3acd029587160 100644
--- a/clang/include/clang/Basic/TargetOptions.h
+++ b/clang/include/clang/Basic/TargetOptions.h
@@ -78,9 +78,17 @@ class TargetOptions {
/// \brief If enabled, allow AMDGPU unsafe floating point atomics.
bool AllowAMDGPUUnsafeFPAtomics = false;
+ /// \brief Enumeration value for AMDGPU code object version, which is the
+ /// code object version times 100.
+ enum CodeObjectVersionKind {
+ COV_None,
+ COV_2 = 200, // Unsupported.
+ COV_3 = 300, // Unsupported.
+ COV_4 = 400,
+ COV_5 = 500,
+ };
/// \brief Code object version for AMDGPU.
- llvm::CodeObjectVersionKind CodeObjectVersion =
- llvm::CodeObjectVersionKind::COV_None;
+ CodeObjectVersionKind CodeObjectVersion = CodeObjectVersionKind::COV_None;
/// \brief Enumeration values for AMDGPU printf lowering scheme
enum class AMDGPUPrintfKind {
diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td
index 7dd2755350f7a56..9689f12fd01417b 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -4721,9 +4721,9 @@ defm amdgpu_ieee : BoolOption<"m", "amdgpu-ieee",
def mcode_object_version_EQ : Joined<["-"], "mcode-object-version=">, Group<m_Group>,
HelpText<"Specify code object ABI version. Defaults to 4. (AMDGPU only)">,
- Visibility<[ClangOption, FlangOption, CC1Option, FC1Option]>,
+ Visibility<[ClangOption, CC1Option]>,
Values<"none,4,5">,
- NormalizedValuesScope<"llvm::CodeObjectVersionKind">,
+ NormalizedValuesScope<"TargetOptions">,
NormalizedValues<["COV_None", "COV_4", "COV_5"]>,
MarshallingInfoEnum<TargetOpts<"CodeObjectVersion">, "COV_4">;
diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp
index 65d9862621061d8..c83ea966fdeadc6 100644
--- a/clang/lib/CodeGen/CGBuiltin.cpp
+++ b/clang/lib/CodeGen/CGBuiltin.cpp
@@ -17588,7 +17588,7 @@ Value *EmitAMDGPUWorkGroupSize(CodeGenFunction &CGF, unsigned Index) {
auto Cov = CGF.getTarget().getTargetOpts().CodeObjectVersion;
- if (Cov == CodeObjectVersionKind::COV_None) {
+ if (Cov == clang::TargetOptions::COV_None) {
StringRef Name = "__oclc_ABI_version";
auto *ABIVersionC = CGF.CGM.getModule().getNamedGlobal(Name);
if (!ABIVersionC)
@@ -17606,7 +17606,7 @@ Value *EmitAMDGPUWorkGroupSize(CodeGenFunction &CGF, unsigned Index) {
Value *IsCOV5 = CGF.Builder.CreateICmpSGE(
ABIVersion,
- llvm::ConstantInt::get(CGF.Int32Ty, CodeObjectVersionKind::COV_5));
+ llvm::ConstantInt::get(CGF.Int32Ty, clang::TargetOptions::COV_5));
// Indexing the implicit kernarg segment.
Value *ImplicitGEP = CGF.Builder.CreateConstGEP1_32(
@@ -17621,7 +17621,7 @@ Value *EmitAMDGPUWorkGroupSize(CodeGenFunction &CGF, unsigned Index) {
Address(Result, CGF.Int16Ty, CharUnits::fromQuantity(2)));
} else {
Value *GEP = nullptr;
- if (Cov == CodeObjectVersionKind::COV_5) {
+ if (Cov == clang::TargetOptions::COV_5) {
// Indexing the implicit kernarg segment.
GEP = CGF.Builder.CreateConstGEP1_32(
CGF.Int8Ty, EmitAMDGPUImplicitArgPtr(CGF), 12 + Index * 2);
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp
index 3225c984768657a..41ff4a992f194ae 100644
--- a/clang/lib/CodeGen/CodeGenModule.cpp
+++ b/clang/lib/CodeGen/CodeGenModule.cpp
@@ -847,7 +847,7 @@ void CodeGenModule::Release() {
// Emit amdgpu_code_object_version module flag, which is code object version
// times 100.
if (getTarget().getTargetOpts().CodeObjectVersion !=
- llvm::CodeObjectVersionKind::COV_None) {
+ TargetOptions::COV_None) {
getModule().addModuleFlag(llvm::Module::Error,
"amdgpu_code_object_version",
getTarget().getTargetOpts().CodeObjectVersion);
diff --git a/clang/lib/CodeGen/Targets/AMDGPU.cpp b/clang/lib/CodeGen/Targets/AMDGPU.cpp
index b654e3f12af8d49..4dd25213dda9fa5 100644
--- a/clang/lib/CodeGen/Targets/AMDGPU.cpp
+++ b/clang/lib/CodeGen/Targets/AMDGPU.cpp
@@ -368,7 +368,7 @@ void AMDGPUTargetCodeGenInfo::emitTargetGlobals(
return;
if (CGM.getTarget().getTargetOpts().CodeObjectVersion ==
- llvm::CodeObjectVersionKind::COV_None)
+ clang::TargetOptions::COV_None)
return;
auto *Type = llvm::IntegerType::getIntNTy(CGM.getModule().getContext(), 32);
diff --git a/clang/lib/Driver/ToolChains/Flang.cpp b/clang/lib/Driver/ToolChains/Flang.cpp
index a6fa94defa5e217..86e1c57e485685e 100644
--- a/clang/lib/Driver/ToolChains/Flang.cpp
+++ b/clang/lib/Driver/ToolChains/Flang.cpp
@@ -277,14 +277,6 @@ static void processVSRuntimeLibrary(const ToolChain &TC, const ArgList &Args,
}
}
-void Flang::AddAMDGPUTargetArgs(const ArgList &Args,
- ArgStringList &CmdArgs) const {
- if (Arg *A = Args.getLastArg(options::OPT_mcode_object_version_EQ)) {
- StringRef Val = A->getValue();
- CmdArgs.push_back(Args.MakeArgString("-mcode-object-version=" + Val));
- }
-}
-
void Flang::addTargetOptions(const ArgList &Args,
ArgStringList &CmdArgs) const {
const ToolChain &TC = getToolChain();
@@ -308,9 +300,6 @@ void Flang::addTargetOptions(const ArgList &Args,
case llvm::Triple::r600:
case llvm::Triple::amdgcn:
- getTargetFeatures(D, Triple, Args, CmdArgs, /*ForAs*/ false);
- AddAMDGPUTargetArgs(Args, CmdArgs);
- break;
case llvm::Triple::riscv64:
case llvm::Triple::x86_64:
getTargetFeatures(D, Triple, Args, CmdArgs, /*ForAs*/ false);
diff --git a/clang/lib/Driver/ToolChains/Flang.h b/clang/lib/Driver/ToolChains/Flang.h
index 8d35080e1c0c88b..0141240b5d3ac90 100644
--- a/clang/lib/Driver/ToolChains/Flang.h
+++ b/clang/lib/Driver/ToolChains/Flang.h
@@ -63,13 +63,6 @@ class LLVM_LIBRARY_VISIBILITY Flang : public Tool {
void AddAArch64TargetArgs(const llvm::opt::ArgList &Args,
llvm::opt::ArgStringList &CmdArgs) const;
- /// Add specific options for AMDGPU target.
- ///
- /// \param [in] Args The list of input driver arguments
- /// \param [out] CmdArgs The list of output command arguments
- void AddAMDGPUTargetArgs(const llvm::opt::ArgList &Args,
- llvm::opt::ArgStringList &CmdArgs) const;
-
/// Extract offload options from the driver arguments and add them to
/// the command arguments.
/// \param [in] C The current compilation for the driver invocation
diff --git a/flang/include/flang/Frontend/CodeGenOptions.h b/flang/include/flang/Frontend/CodeGenOptions.h
index 0c318e4023af435..b86bb88610a9a4a 100644
--- a/flang/include/flang/Frontend/CodeGenOptions.h
+++ b/flang/include/flang/Frontend/CodeGenOptions.h
@@ -85,10 +85,6 @@ class CodeGenOptions : public CodeGenOptionsBase {
RK_WithPattern, // Remark pattern specified via '-Rgroup=regexp'.
};
- /// \brief Code object version for AMDGPU.
- llvm::CodeObjectVersionKind CodeObjectVersion =
- llvm::CodeObjectVersionKind::COV_4;
-
/// Optimization remark with an optional regular expression pattern.
struct OptRemark {
RemarkKind Kind = RemarkKind::RK_Missing;
diff --git a/flang/lib/Frontend/CompilerInvocation.cpp b/flang/lib/Frontend/CompilerInvocation.cpp
index 0dc11abcbd7ba3d..1c09ae9c281eb47 100644
--- a/flang/lib/Frontend/CompilerInvocation.cpp
+++ b/flang/lib/Frontend/CompilerInvocation.cpp
@@ -268,17 +268,6 @@ static void parseCodeGenArgs(Fortran::frontend::CodeGenOptions &opts,
opts.PrepareForThinLTO = true;
}
- if (const llvm::opt::Arg *a = args.getLastArg(
- clang::driver::options::OPT_mcode_object_version_EQ)) {
- llvm::StringRef s = a->getValue();
- if (s == "5")
- opts.CodeObjectVersion = llvm::CodeObjectVersionKind::COV_5;
- if (s == "4")
- opts.CodeObjectVersion = llvm::CodeObjectVersionKind::COV_4;
- if (s == "none")
- opts.CodeObjectVersion = llvm::CodeObjectVersionKind::COV_None;
- }
-
// -f[no-]save-optimization-record[=<format>]
if (const llvm::opt::Arg *a =
args.getLastArg(clang::driver::options::OPT_opt_record_file))
diff --git a/flang/lib/Frontend/FrontendActions.cpp b/flang/lib/Frontend/FrontendActions.cpp
index 6663548cc81b66c..f573ac82c91cd8e 100644
--- a/flang/lib/Frontend/FrontendActions.cpp
+++ b/flang/lib/Frontend/FrontendActions.cpp
@@ -244,7 +244,8 @@ static void setMLIRDataLayout(mlir::ModuleOp &mlirModule,
mlirModule->setAttr(mlir::DLTIDialect::kDataLayoutAttrName, dlSpec);
}
-static void addDependentLibs(mlir::ModuleOp &mlirModule, CompilerInstance &ci) {
+static void addDepdendentLibs(mlir::ModuleOp &mlirModule,
+ CompilerInstance &ci) {
const std::vector<std::string> &libs =
ci.getInvocation().getCodeGenOpts().DependentLibs;
if (libs.empty()) {
@@ -263,68 +264,6 @@ static void addDependentLibs(mlir::ModuleOp &mlirModule, CompilerInstance &ci) {
}
}
-// Add to MLIR code target specific items which are dependent on target
-// configuration specified by the user.
-// Clang equivalent function: AMDGPUTargetCodeGenInfo::emitTargetGlobals
-static void addAMDGPUSpecificMLIRItems(mlir::ModuleOp &mlirModule,
- CompilerInstance &ci) {
- const TargetOptions &targetOpts = ci.getInvocation().getTargetOpts();
- const llvm::Triple triple(targetOpts.triple);
- const llvm::StringRef codeObjectVersionGlobalOpName = "__oclc_ABI_version";
-
- // TODO: Share address spaces enumeration between Clang and Flang.
- // Currently this enumeration is defined in Clang specific class
- // defined in file: clang/lib/Basic/Targets/AMDGPU.h .
- // and we need to move it to LLVM directory.
- const int constantAddressSpace = 4;
-
- if (!triple.isAMDGPU()) {
- return;
- }
- const CodeGenOptions &codeGenOpts = ci.getInvocation().getCodeGenOpts();
- if (codeGenOpts.CodeObjectVersion == llvm::CodeObjectVersionKind::COV_None) {
- return;
- }
-
- mlir::ConversionPatternRewriter builder(mlirModule.getContext());
- unsigned oclcABIVERsion = codeGenOpts.CodeObjectVersion;
- auto int32Type = builder.getI32Type();
-
- std::optional<mlir::LLVM::GlobalOp> originalGV;
-
- mlirModule.walk([&originalGV, codeObjectVersionGlobalOpName](
- mlir::LLVM::GlobalOp globalOp) {
- if (globalOp.getName() == codeObjectVersionGlobalOpName)
- originalGV = globalOp;
- });
- if (originalGV.has_value()) {
- mlir::LLVM::GlobalOp originalGVOp = originalGV.value();
- if (originalGVOp.getLinkage() != mlir::LLVM::Linkage::External) {
- return;
- }
- // Update the variable if it is already present in MLIR but it was marked
- // as external linkage variable
- originalGVOp.setLinkage(mlir::LLVM::Linkage::WeakODR);
- originalGVOp.setValueAttr(
- builder.getIntegerAttr(int32Type, oclcABIVERsion));
- originalGVOp.setUnnamedAddr(mlir::LLVM::UnnamedAddr::Local);
- originalGVOp.setAddrSpace(constantAddressSpace);
- originalGVOp.setVisibility_(mlir::LLVM::Visibility::Hidden);
- return;
- }
-
- mlir::LLVM::GlobalOp covInfo = builder.create<mlir::LLVM::GlobalOp>(
- /* Location */ mlirModule.getLoc(), /* Type */ int32Type,
- /* IsConstant */ true, /* Linkage */ mlir::LLVM::Linkage::WeakODR,
- /* Name */ codeObjectVersionGlobalOpName,
- /* Value */ builder.getIntegerAttr(int32Type, oclcABIVERsion));
- covInfo.setUnnamedAddr(mlir::LLVM::UnnamedAddr::Local);
- covInfo.setAddrSpace(constantAddressSpace);
- covInfo.setVisibility_(mlir::LLVM::Visibility::Hidden);
- builder.setInsertionPointToStart(mlirModule.getBody());
- builder.insert(covInfo);
-}
-
bool CodeGenAction::beginSourceFileAction() {
llvmCtx = std::make_unique<llvm::LLVMContext>();
CompilerInstance &ci = this->getInstance();
@@ -426,10 +365,8 @@ bool CodeGenAction::beginSourceFileAction() {
Fortran::parser::Program &parseTree{*ci.getParsing().parseTree()};
lb.lower(parseTree, ci.getInvocation().getSemanticsContext());
- // Add target specific items like dependent libraries, target specific
- // constants etc.
- addDependentLibs(*mlirModule, ci);
- addAMDGPUSpecificMLIRItems(*mlirModule, ci);
+ // Add dependent libraries
+ addDepdendentLibs(*mlirModule, ci);
// run the default passes.
mlir::PassManager pm((*mlirModule)->getName(),
diff --git a/flang/test/Driver/code-object-version.f90 b/flang/test/Driver/code-object-version.f90
deleted file mode 100644
index cd88ff7fe29a282..000000000000000
--- a/flang/test/Driver/code-object-version.f90
+++ /dev/null
@@ -1,8 +0,0 @@
-! RUN: not %flang -target amdgcn-amd-amdhsa -target-cpu gfx908 -mcode-object-version=3 -S %s -o \
-! RUN: /dev/null 2>&1 | FileCheck --check-prefix=INVALID_VERSION %s
-
-! RUN: %flang -target x86_64-unknown-linux-gnu -mcode-object-version=3 -S %s -o \
-! RUN: /dev/null 2>&1 | FileCheck --check-prefix=UNUSED_PARAM %s
-
-! INVALID_VERSION: error: invalid integral value '3' in '-mcode-object-version=3'
-! UNUSED_PARAM: warning: argument unused during compilation: '-mcode-object-version=3' [-Wunused-command-line-argument]
diff --git a/flang/test/Driver/driver-help-hidden.f90 b/flang/test/Driver/driver-help-hidden.f90
index 4ea89776416a6b8..b276f1906e1a457 100644
--- a/flang/test/Driver/driver-help-hidden.f90
+++ b/flang/test/Driver/driver-help-hidden.f90
@@ -114,8 +114,6 @@
! CHECK-NEXT: -I <dir> Add directory to the end of the list of include search paths
! CHECK-NEXT: -L <dir> Add directory to library search path
! CHECK-NEXT: -march=<value> For a list of available architectures for the target use '-mcpu=help'
-! CHECK-NEXT: -mcode-object-version=<value>
-! CHECK-NEXT: Specify code object ABI version. Defaults to 4. (AMDGPU only)
! CHECK-NEXT: -mcpu=<value> For a list of available CPUs for the target use '-mcpu=help'
! CHECK-NEXT: -mllvm=<arg> Alias for -mllvm
! CHECK-NEXT: -mllvm <value> Additional arguments to forward to LLVM's option processing
diff --git a/flang/test/Driver/driver-help.f90 b/flang/test/Driver/driver-help.f90
index 6fb306d3196fbae..452c62541e72e61 100644
--- a/flang/test/Driver/driver-help.f90
+++ b/flang/test/Driver/driver-help.f90
@@ -100,8 +100,6 @@
! HELP-NEXT: -I <dir> Add directory to the end of the list of include search paths
! HELP-NEXT: -L <dir> Add directory to library search path
! HELP-NEXT: -march=<value> For a list of available architectures for the target use '-mcpu=help'
-! HELP-NEXT: -mcode-object-version=<value>
-! HELP-NEXT: Specify code object ABI version. Defaults to 4. (AMDGPU only)
! HELP-NEXT: -mcpu=<value> For a list of available CPUs for the target use '-mcpu=help'
! HELP-NEXT: -mllvm=<arg> Alias for -mllvm
! HELP-NEXT: -mllvm <value> Additional arguments to forward to LLVM's option processing
@@ -234,8 +232,6 @@
! HELP-FC1-NEXT: -init-only Only execute frontend initialization
! HELP-FC1-NEXT: -I <dir> Add directory to the end of the list of include search paths
! HELP-FC1-NEXT: -load <dsopath> Load the named plugin (dynamic shared object)
-! HELP-FC1-NEXT: -mcode-object-version=<value>
-! HELP-FC1-NEXT: Specify code object ABI version. Defaults to 4. (AMDGPU only)
! HELP-FC1-NEXT: -menable-no-infs Allow optimization to assume there are no infinities.
! HELP-FC1-NEXT: -menable-no-nans Allow optimization to assume there are no NaNs.
! HELP-FC1-NEXT: -mllvm <value> Additional arguments to forward to LLVM's option processing
diff --git a/flang/test/Lower/AMD/code-object-version.f90 b/flang/test/Lower/AMD/code-object-version.f90
deleted file mode 100644
index 7cb9dc079724e72..000000000000000
--- a/flang/test/Lower/AMD/code-object-version.f90
+++ /dev/null
@@ -1,13 +0,0 @@
-!REQUIRES: amdgpu-registered-target
-!RUN: %flang_fc1 -emit-hlfir -triple amdgcn-amd-amdhsa -target-cpu gfx908 %s -o - | FileCheck --check-prefix=COV_DEFAULT %s
-!RUN: %flang_fc1 -emit-hlfir -triple amdgcn-amd-amdhsa -target-cpu gfx908 -mcode-object-version=none %s -o - | FileCheck --check-prefix=COV_NONE %s
-!RUN: %flang_fc1 -emit-hlfir -triple amdgcn-amd-amdhsa -target-cpu gfx908 -mcode-object-version=4 %s -o - | FileCheck --check-prefix=COV_4 %s
-!RUN: %flang_fc1 -emit-hlfir -triple amdgcn-amd-amdhsa -target-cpu gfx908 -mcode-object-version=5 %s -o - | FileCheck --check-prefix=COV_5 %s
-
-!COV_DEFAULT: llvm.mlir.global weak_odr hidden local_unnamed_addr constant @__oclc_ABI_version(400 : i32) {addr_space = 4 : i32} : i32
-!COV_NONE-NOT: llvm.mlir.global weak_odr hidden local_unnamed_addr constant @__oclc_ABI_version(400 : i32) {addr_space = 4 : i32} : i32
-!COV_4: llvm.mlir.global weak_odr hidden local_unnamed_addr constant @__oclc_ABI_version(400 : i32) {addr_space = 4 : i32} : i32
-!COV_5: llvm.mlir.global weak_odr hidden local_unnamed_addr constant @__oclc_ABI_version(500 : i32) {addr_space = 4 : i32} : i32
-subroutine target_simple
-end subroutine target_simple
-
diff --git a/llvm/include/llvm/Target/TargetOptions.h b/llvm/include/llvm/Target/TargetOptions.h
index 4df897c047a38ac..d6d767f3d22c73e 100644
--- a/llvm/include/llvm/Target/TargetOptions.h
+++ b/llvm/include/llvm/Target/TargetOptions.h
@@ -121,16 +121,6 @@ namespace llvm {
Never,
};
- /// \brief Enumeration value for AMDGPU code object version, which is the
- /// code object version times 100.
- enum CodeObjectVersionKind {
- COV_None,
- COV_2 = 200, // Unsupported.
- COV_3 = 300, // Unsupported.
- COV_4 = 400,
- COV_5 = 500,
- };
-
class TargetOptions {
public:
TargetOptions()
More information about the cfe-commits
mailing list