@@ -86,14 +86,34 @@ static bool checkSystemForAMDGPU(const ArgList &Args, const AMDGPUToolChain &TC,
86
86
} // namespace
87
87
88
88
const char *AMDGCN::OpenMPLinker::constructLLVMLinkCommand (
89
- Compilation &C, const JobAction &JA, const InputInfoList &Inputs ,
90
- const ArgList &Args, StringRef SubArchName ,
91
- StringRef OutputFilePrefix) const {
89
+ const toolchains::AMDGPUOpenMPToolChain &AMDGPUOpenMPTC, Compilation &C ,
90
+ const JobAction &JA, const InputInfoList &Inputs, const ArgList &Args ,
91
+ StringRef SubArchName, StringRef OutputFilePrefix) const {
92
92
ArgStringList CmdArgs;
93
93
94
94
for (const auto &II : Inputs)
95
95
if (II.isFilename ())
96
96
CmdArgs.push_back (II.getFilename ());
97
+
98
+ if (Args.hasArg (options::OPT_l)) {
99
+ auto Lm = Args.getAllArgValues (options::OPT_l);
100
+ bool HasLibm = false ;
101
+ for (auto &Lib : Lm) {
102
+ if (Lib == " m" ) {
103
+ HasLibm = true ;
104
+ break ;
105
+ }
106
+ }
107
+
108
+ if (HasLibm) {
109
+ SmallVector<std::string, 12 > BCLibs =
110
+ AMDGPUOpenMPTC.getCommonDeviceLibNames (Args, SubArchName.str ());
111
+ llvm::for_each (BCLibs, [&](StringRef BCFile) {
112
+ CmdArgs.push_back (Args.MakeArgString (BCFile));
113
+ });
114
+ }
115
+ }
116
+
97
117
// Add an intermediate output file.
98
118
CmdArgs.push_back (" -o" );
99
119
const char *OutputFileName =
@@ -182,8 +202,8 @@ void AMDGCN::OpenMPLinker::ConstructJob(Compilation &C, const JobAction &JA,
182
202
assert (Prefix.length () && " no linker inputs are files " );
183
203
184
204
// Each command outputs different files.
185
- const char *LLVMLinkCommand =
186
- constructLLVMLinkCommand ( C, JA, Inputs, Args, GPUArch, Prefix);
205
+ const char *LLVMLinkCommand = constructLLVMLinkCommand (
206
+ AMDGPUOpenMPTC, C, JA, Inputs, Args, GPUArch, Prefix);
187
207
188
208
// Produce readable assembly if save-temps is enabled.
189
209
if (C.getDriver ().isSaveTempsEnabled ())
@@ -234,27 +254,6 @@ void AMDGPUOpenMPToolChain::addClangTargetOptions(
234
254
235
255
addOpenMPDeviceRTL (getDriver (), DriverArgs, CC1Args, BitcodeSuffix,
236
256
getTriple ());
237
-
238
- if (!DriverArgs.hasArg (options::OPT_l))
239
- return ;
240
-
241
- auto Lm = DriverArgs.getAllArgValues (options::OPT_l);
242
- bool HasLibm = false ;
243
- for (auto &Lib : Lm) {
244
- if (Lib == " m" ) {
245
- HasLibm = true ;
246
- break ;
247
- }
248
- }
249
-
250
- if (HasLibm) {
251
- SmallVector<std::string, 12 > BCLibs =
252
- getCommonDeviceLibNames (DriverArgs, GPUArch);
253
- llvm::for_each (BCLibs, [&](StringRef BCFile) {
254
- CC1Args.push_back (" -mlink-builtin-bitcode" );
255
- CC1Args.push_back (DriverArgs.MakeArgString (BCFile));
256
- });
257
- }
258
257
}
259
258
260
259
llvm::opt::DerivedArgList *AMDGPUOpenMPToolChain::TranslateArgs (
0 commit comments