@@ -876,7 +876,7 @@ void tools::addLTOOptions(const ToolChain &ToolChain, const ArgList &Args,
876
876
// LowerMatrixIntrinsicsPass, which is transitively called by
877
877
// buildThinLTODefaultPipeline under EnableMatrix.
878
878
if ((IsThinLTO || IsFatLTO || IsUnifiedLTO) &&
879
- Args.hasArg (options::OPT_fenable_matrix))
879
+ Args.hasArg (options::OPT_fenable_matrix))
880
880
CmdArgs.push_back (
881
881
Args.MakeArgString (Twine (PluginOptPrefix) + " -enable-matrix" ));
882
882
@@ -1075,53 +1075,38 @@ void tools::addLTOOptions(const ToolChain &ToolChain, const ArgList &Args,
1075
1075
1076
1076
// / Adds the '-lcgpu' and '-lmgpu' libraries to the compilation to include the
1077
1077
// / LLVM C library for GPUs.
1078
- static void addOpenMPDeviceLibC (const ToolChain &TC , const ArgList &Args,
1078
+ static void addOpenMPDeviceLibC (const Compilation &C , const ArgList &Args,
1079
1079
ArgStringList &CmdArgs) {
1080
1080
if (Args.hasArg (options::OPT_nogpulib) || Args.hasArg (options::OPT_nolibc))
1081
1081
return ;
1082
1082
1083
1083
// Check the resource directory for the LLVM libc GPU declarations. If it's
1084
1084
// found we can assume that LLVM was built with support for the GPU libc.
1085
- SmallString<256 > LibCDecls (TC .getDriver ().ResourceDir );
1085
+ SmallString<256 > LibCDecls (C .getDriver ().ResourceDir );
1086
1086
llvm::sys::path::append (LibCDecls, " include" , " llvm_libc_wrappers" ,
1087
1087
" llvm-libc-decls" );
1088
1088
bool HasLibC = llvm::sys::fs::exists (LibCDecls) &&
1089
1089
llvm::sys::fs::is_directory (LibCDecls);
1090
1090
if (!Args.hasFlag (options::OPT_gpulibc, options::OPT_nogpulibc, HasLibC))
1091
1091
return ;
1092
1092
1093
- // We don't have access to the offloading toolchains here, so determine from
1094
- // the arguments if we have any active NVPTX or AMDGPU toolchains.
1095
- llvm::DenseSet<const char *> Libraries;
1096
- if (const Arg *Targets = Args.getLastArg (options::OPT_fopenmp_targets_EQ)) {
1097
- if (llvm::any_of (Targets->getValues (),
1098
- [](auto S) { return llvm::Triple (S).isAMDGPU (); })) {
1099
- Libraries.insert (" -lcgpu-amdgpu" );
1100
- Libraries.insert (" -lmgpu-amdgpu" );
1101
- }
1102
- if (llvm::any_of (Targets->getValues (),
1103
- [](auto S) { return llvm::Triple (S).isNVPTX (); })) {
1104
- Libraries.insert (" -lcgpu-nvptx" );
1105
- Libraries.insert (" -lmgpu-nvptx" );
1106
- }
1107
- }
1093
+ SmallVector<const ToolChain *> ToolChains;
1094
+ auto TCRange = C.getOffloadToolChains (Action::OFK_OpenMP);
1095
+ for (auto TI = TCRange.first , TE = TCRange.second ; TI != TE; ++TI)
1096
+ ToolChains.push_back (TI->second );
1108
1097
1109
- for (StringRef Arch : Args.getAllArgValues (options::OPT_offload_arch_EQ)) {
1110
- if (llvm::any_of (llvm::split (Arch, " ," ), [](StringRef Str) {
1111
- return IsAMDGpuArch (StringToCudaArch (Str));
1112
- })) {
1113
- Libraries.insert (" -lcgpu-amdgpu" );
1114
- Libraries.insert (" -lmgpu-amdgpu" );
1115
- }
1116
- if (llvm::any_of (llvm::split (Arch, " ," ), [](StringRef Str) {
1117
- return IsNVIDIAGpuArch (StringToCudaArch (Str));
1118
- })) {
1119
- Libraries.insert (" -lcgpu-nvptx" );
1120
- Libraries.insert (" -lmgpu-nvptx" );
1121
- }
1098
+ if (llvm::any_of (ToolChains, [](const ToolChain *TC) {
1099
+ return TC->getTriple ().isAMDGPU ();
1100
+ })) {
1101
+ CmdArgs.push_back (" -lcgpu-amdgpu" );
1102
+ CmdArgs.push_back (" -lmgpu-amdgpu" );
1103
+ }
1104
+ if (llvm::any_of (ToolChains, [](const ToolChain *TC) {
1105
+ return TC->getTriple ().isNVPTX ();
1106
+ })) {
1107
+ CmdArgs.push_back (" -lcgpu-nvptx" );
1108
+ CmdArgs.push_back (" -lmgpu-nvptx" );
1122
1109
}
1123
-
1124
- llvm::append_range (CmdArgs, Libraries);
1125
1110
}
1126
1111
1127
1112
void tools::addOpenMPRuntimeLibraryPath (const ToolChain &TC,
@@ -1153,9 +1138,10 @@ void tools::addArchSpecificRPath(const ToolChain &TC, const ArgList &Args,
1153
1138
}
1154
1139
}
1155
1140
1156
- bool tools::addOpenMPRuntime (ArgStringList &CmdArgs, const ToolChain &TC,
1157
- const ArgList &Args, bool ForceStaticHostRuntime,
1158
- bool IsOffloadingHost, bool GompNeedsRT) {
1141
+ bool tools::addOpenMPRuntime (const Compilation &C, ArgStringList &CmdArgs,
1142
+ const ToolChain &TC, const ArgList &Args,
1143
+ bool ForceStaticHostRuntime, bool IsOffloadingHost,
1144
+ bool GompNeedsRT) {
1159
1145
if (!Args.hasFlag (options::OPT_fopenmp, options::OPT_fopenmp_EQ,
1160
1146
options::OPT_fno_openmp, false ))
1161
1147
return false ;
@@ -1187,7 +1173,7 @@ bool tools::addOpenMPRuntime(ArgStringList &CmdArgs, const ToolChain &TC,
1187
1173
CmdArgs.push_back (" -Bdynamic" );
1188
1174
1189
1175
if (RTKind == Driver::OMPRT_GOMP && GompNeedsRT)
1190
- CmdArgs.push_back (" -lrt" );
1176
+ CmdArgs.push_back (" -lrt" );
1191
1177
1192
1178
if (IsOffloadingHost)
1193
1179
CmdArgs.push_back (" -lomptarget" );
@@ -1196,7 +1182,7 @@ bool tools::addOpenMPRuntime(ArgStringList &CmdArgs, const ToolChain &TC,
1196
1182
CmdArgs.push_back (" -lomptarget.devicertl" );
1197
1183
1198
1184
if (IsOffloadingHost)
1199
- addOpenMPDeviceLibC (TC , Args, CmdArgs);
1185
+ addOpenMPDeviceLibC (C , Args, CmdArgs);
1200
1186
1201
1187
addArchSpecificRPath (TC, Args, CmdArgs);
1202
1188
addOpenMPRuntimeLibraryPath (TC, Args, CmdArgs);
@@ -1357,10 +1343,12 @@ static void addSanitizerRuntime(const ToolChain &TC, const ArgList &Args,
1357
1343
bool IsShared, bool IsWhole) {
1358
1344
// Wrap any static runtimes that must be forced into executable in
1359
1345
// whole-archive.
1360
- if (IsWhole) CmdArgs.push_back (" --whole-archive" );
1346
+ if (IsWhole)
1347
+ CmdArgs.push_back (" --whole-archive" );
1361
1348
CmdArgs.push_back (TC.getCompilerRTArgString (
1362
1349
Args, Sanitizer, IsShared ? ToolChain::FT_Shared : ToolChain::FT_Static));
1363
- if (IsWhole) CmdArgs.push_back (" --no-whole-archive" );
1350
+ if (IsWhole)
1351
+ CmdArgs.push_back (" --no-whole-archive" );
1364
1352
1365
1353
if (IsShared) {
1366
1354
addArchSpecificRPath (TC, Args, CmdArgs);
@@ -1427,8 +1415,7 @@ void tools::linkSanitizerRuntimeDeps(const ToolChain &TC,
1427
1415
TC.getTriple ().getOS () != llvm::Triple::RTEMS)
1428
1416
CmdArgs.push_back (" -ldl" );
1429
1417
// Required for backtrace on some OSes
1430
- if (TC.getTriple ().isOSFreeBSD () ||
1431
- TC.getTriple ().isOSNetBSD () ||
1418
+ if (TC.getTriple ().isOSFreeBSD () || TC.getTriple ().isOSNetBSD () ||
1432
1419
TC.getTriple ().isOSOpenBSD ())
1433
1420
CmdArgs.push_back (" -lexecinfo" );
1434
1421
// There is no libresolv on Android, FreeBSD, OpenBSD, etc. On musl
@@ -1640,7 +1627,8 @@ bool tools::addSanitizerRuntimes(const ToolChain &TC, const ArgList &Args,
1640
1627
return !StaticRuntimes.empty () || !NonWholeStaticRuntimes.empty ();
1641
1628
}
1642
1629
1643
- bool tools::addXRayRuntime (const ToolChain&TC, const ArgList &Args, ArgStringList &CmdArgs) {
1630
+ bool tools::addXRayRuntime (const ToolChain &TC, const ArgList &Args,
1631
+ ArgStringList &CmdArgs) {
1644
1632
if (Args.hasArg (options::OPT_shared))
1645
1633
return false ;
1646
1634
@@ -1665,8 +1653,7 @@ void tools::linkXRayRuntimeDeps(const ToolChain &TC,
1665
1653
CmdArgs.push_back (" -lrt" );
1666
1654
CmdArgs.push_back (" -lm" );
1667
1655
1668
- if (!TC.getTriple ().isOSFreeBSD () &&
1669
- !TC.getTriple ().isOSNetBSD () &&
1656
+ if (!TC.getTriple ().isOSFreeBSD () && !TC.getTriple ().isOSNetBSD () &&
1670
1657
!TC.getTriple ().isOSOpenBSD ())
1671
1658
CmdArgs.push_back (" -ldl" );
1672
1659
}
@@ -1957,19 +1944,19 @@ tools::ParsePICArgs(const ToolChain &ToolChain, const ArgList &Args) {
1957
1944
1958
1945
bool EmbeddedPISupported;
1959
1946
switch (Triple.getArch ()) {
1960
- case llvm::Triple::arm:
1961
- case llvm::Triple::armeb:
1962
- case llvm::Triple::thumb:
1963
- case llvm::Triple::thumbeb:
1964
- EmbeddedPISupported = true ;
1965
- break ;
1966
- default :
1967
- EmbeddedPISupported = false ;
1968
- break ;
1947
+ case llvm::Triple::arm:
1948
+ case llvm::Triple::armeb:
1949
+ case llvm::Triple::thumb:
1950
+ case llvm::Triple::thumbeb:
1951
+ EmbeddedPISupported = true ;
1952
+ break ;
1953
+ default :
1954
+ EmbeddedPISupported = false ;
1955
+ break ;
1969
1956
}
1970
1957
1971
1958
bool ROPI = false , RWPI = false ;
1972
- Arg* LastROPIArg = Args.getLastArg (options::OPT_fropi, options::OPT_fno_ropi);
1959
+ Arg * LastROPIArg = Args.getLastArg (options::OPT_fropi, options::OPT_fno_ropi);
1973
1960
if (LastROPIArg && LastROPIArg->getOption ().matches (options::OPT_fropi)) {
1974
1961
if (!EmbeddedPISupported)
1975
1962
ToolChain.getDriver ().Diag (diag::err_drv_unsupported_opt_for_target)
@@ -1998,7 +1985,7 @@ tools::ParsePICArgs(const ToolChain &ToolChain, const ArgList &Args) {
1998
1985
if (ABIName == " n64" )
1999
1986
PIC = true ;
2000
1987
// When targettng MIPS with -mno-abicalls, it's always static.
2001
- if (Args.hasArg (options::OPT_mno_abicalls))
1988
+ if (Args.hasArg (options::OPT_mno_abicalls))
2002
1989
return std::make_tuple (llvm::Reloc::Static, 0U , false );
2003
1990
// Unlike other architectures, MIPS, even with -fPIC/-mxgot/multigot,
2004
1991
// does not use PIC level 2 for historical reasons.
@@ -2160,7 +2147,8 @@ enum class LibGccType { UnspecifiedLibGcc, StaticLibGcc, SharedLibGcc };
2160
2147
static LibGccType getLibGccType (const ToolChain &TC, const Driver &D,
2161
2148
const ArgList &Args) {
2162
2149
if (Args.hasArg (options::OPT_static_libgcc) ||
2163
- Args.hasArg (options::OPT_static) || Args.hasArg (options::OPT_static_pie) ||
2150
+ Args.hasArg (options::OPT_static) ||
2151
+ Args.hasArg (options::OPT_static_pie) ||
2164
2152
// The Android NDK only provides libunwind.a, not libunwind.so.
2165
2153
TC.getTriple ().isAndroid ())
2166
2154
return LibGccType::StaticLibGcc;
@@ -2528,11 +2516,10 @@ static void GetSDLFromOffloadArchive(
2528
2516
return ;
2529
2517
2530
2518
StringRef Prefix = isBitCodeSDL ? " libbc-" : " lib" ;
2531
- std::string OutputLib =
2532
- D.GetTemporaryPath (Twine (Prefix + llvm::sys::path::filename (Lib) + " -" +
2533
- Arch + " -" + Target)
2534
- .str (),
2535
- " a" );
2519
+ std::string OutputLib = D.GetTemporaryPath (
2520
+ Twine (Prefix + llvm::sys::path::filename (Lib) + " -" + Arch + " -" + Target)
2521
+ .str (),
2522
+ " a" );
2536
2523
2537
2524
C.addTempFile (C.getArgs ().MakeArgString (OutputLib));
2538
2525
@@ -2745,8 +2732,8 @@ void tools::addMachineOutlinerArgs(const Driver &D,
2745
2732
}
2746
2733
};
2747
2734
2748
- if (Arg *A = Args. getLastArg (options::OPT_moutline,
2749
- options::OPT_mno_outline)) {
2735
+ if (Arg *A =
2736
+ Args. getLastArg (options::OPT_moutline, options::OPT_mno_outline)) {
2750
2737
if (A->getOption ().matches (options::OPT_moutline)) {
2751
2738
// We only support -moutline in AArch64 and ARM targets right now. If
2752
2739
// we're not compiling for these, emit a warning and ignore the flag.
0 commit comments