[clang] 6f2ee1c - [OpenMP][AMDGPU] Optimize the linked in math libraries
Johannes Doerfert via cfe-commits
cfe-commits at lists.llvm.org
Wed Jan 19 21:36:40 PST 2022
Author: Johannes Doerfert
Date: 2022-01-19T23:36:36-06:00
New Revision: 6f2ee1ca5e39b4286f7eb1aeb63b408f952f93c9
URL: https://github.com/llvm/llvm-project/commit/6f2ee1ca5e39b4286f7eb1aeb63b408f952f93c9
DIFF: https://github.com/llvm/llvm-project/commit/6f2ee1ca5e39b4286f7eb1aeb63b408f952f93c9.diff
LOG: [OpenMP][AMDGPU] Optimize the linked in math libraries
Once we linked in math files, potentially even if we link in only other
"system libraries", we want to optimize the code again. This is not only
reasonable but also helps to hide various problems with the missing
attribute annotations in the math libraries.
Reviewed By: JonChesterfield
Differential Revision: https://reviews.llvm.org/D116906
Added:
Modified:
clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
Removed:
################################################################################
diff --git a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
index 983d40636b0cd..6899f9360da5d 100644
--- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
@@ -16,6 +16,7 @@
#include "clang/Driver/DriverDiagnostic.h"
#include "clang/Driver/InputInfo.h"
#include "clang/Driver/Options.h"
+#include "clang/Driver/Tool.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/Support/FileSystem.h"
#include "llvm/Support/FormatAdapters.h"
@@ -95,9 +96,9 @@ const char *AMDGCN::OpenMPLinker::constructLLVMLinkCommand(
if (II.isFilename())
CmdArgs.push_back(II.getFilename());
+ bool HasLibm = false;
if (Args.hasArg(options::OPT_l)) {
auto Lm = Args.getAllArgValues(options::OPT_l);
- bool HasLibm = false;
for (auto &Lib : Lm) {
if (Lib == "m") {
HasLibm = true;
@@ -143,6 +144,26 @@ const char *AMDGCN::OpenMPLinker::constructLLVMLinkCommand(
C.addCommand(std::make_unique<Command>(
JA, *this, ResponseFileSupport::AtFileCurCP(), Exec, CmdArgs, Inputs,
InputInfo(&JA, Args.MakeArgString(OutputFileName))));
+
+ // If we linked in libm definitions late we run another round of optimizations
+ // to inline the definitions and fold what is foldable.
+ if (HasLibm) {
+ ArgStringList OptCmdArgs;
+ const char *OptOutputFileName =
+ getOutputFileName(C, OutputFilePrefix, "-linked-opt", "bc");
+ addLLCOptArg(Args, OptCmdArgs);
+ OptCmdArgs.push_back(OutputFileName);
+ OptCmdArgs.push_back("-o");
+ OptCmdArgs.push_back(OptOutputFileName);
+ const char *OptExec =
+ Args.MakeArgString(getToolChain().GetProgramPath("opt"));
+ C.addCommand(std::make_unique<Command>(
+ JA, *this, ResponseFileSupport::AtFileCurCP(), OptExec, OptCmdArgs,
+ InputInfo(&JA, Args.MakeArgString(OutputFileName)),
+ InputInfo(&JA, Args.MakeArgString(OptOutputFileName))));
+ OutputFileName = OptOutputFileName;
+ }
+
return OutputFileName;
}
More information about the cfe-commits
mailing list