Skip to content

Commit 491915b

Browse files
authored
[Driver][NFC][FPGA] Remove FPGA archive support (#17788)
Remove the specific FPGA support in the driver and tools that are associated with FPGA archives. These archives provided an intermediate representation of binaries used for FPGA targets. Creation of these archives were accomplished by using the -fsycl-link=early and -fsycl-link=image options along with the -fintelfpga enabling option. This is simply a step towards full removal of FPGA support in the compiler driver and clang-offload-bundler.
1 parent fc0e4c0 commit 491915b

File tree

10 files changed

+66
-686
lines changed

10 files changed

+66
-686
lines changed

clang/include/clang/Driver/Types.def

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -125,12 +125,7 @@ TYPE("tempfiletable", Tempfiletable,INVALID, "table", phases
125125
TYPE("tempAOCOfilelist", TempAOCOfilelist, INVALID, "txt", phases::Compile, phases::Backend, phases::Assemble, phases::Link)
126126
TYPE("archive", Archive, INVALID, "a", phases::Compile, phases::Backend, phases::Assemble, phases::Link)
127127
TYPE("wholearchive", WholeArchive, INVALID, "a", phases::Compile, phases::Backend, phases::Assemble, phases::Link)
128-
TYPE("fpga_aocx", FPGA_AOCX, INVALID, "aocx", phases::Compile, phases::Backend, phases::Assemble, phases::Link)
129-
TYPE("fpga_aocr", FPGA_AOCR, INVALID, "aocr", phases::Compile, phases::Backend, phases::Assemble, phases::Link)
130-
TYPE("fpga_aocr_emu", FPGA_AOCR_EMU, INVALID, "aocr", phases::Compile, phases::Backend, phases::Assemble, phases::Link)
131-
TYPE("fpga_aoco", FPGA_AOCO, INVALID, "aoco", phases::Compile, phases::Backend, phases::Assemble, phases::Link)
132128
TYPE("fpga_dep", FPGA_Dependencies, INVALID, "d", phases::Compile, phases::Backend, phases::Assemble, phases::Link)
133-
TYPE("fpga_dep_list", FPGA_Dependencies_List, INVALID, "txt", phases::Compile, phases::Backend, phases::Assemble, phases::Link)
134129
TYPE("host_dep_image", Host_Dependencies_Image, INVALID, "out", phases::Compile, phases::Backend, phases::Assemble, phases::Link)
135130
TYPE("api-information", API_INFO, INVALID, "json", phases::Precompile)
136131
TYPE("dx-container", DX_CONTAINER, INVALID, "dxo", phases::Compile, phases::Backend)

clang/include/clang/Driver/Types.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,6 @@ namespace types {
8989
/// isHIP - Is this a HIP input.
9090
bool isHIP(ID Id);
9191

92-
/// isFPGA - Is this FPGA input.
93-
bool isFPGA(ID Id);
94-
9592
/// isArchive - Is this an archive input.
9693
bool isArchive(ID Id);
9794

clang/lib/Driver/Compilation.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -225,8 +225,7 @@ bool Compilation::CleanupFileList(const TempFileList &Files,
225225
// Temporary file lists contain files that need to be cleaned. The
226226
// file containing the information is also removed
227227
if (File.second == types::TY_Tempfilelist ||
228-
File.second == types::TY_Tempfiletable ||
229-
File.second == types::TY_FPGA_Dependencies_List) {
228+
File.second == types::TY_Tempfiletable) {
230229
// These are temporary files and need to be removed.
231230
bool IsTable = File.second == types::TY_Tempfiletable;
232231

clang/lib/Driver/Driver.cpp

Lines changed: 25 additions & 465 deletions
Large diffs are not rendered by default.

clang/lib/Driver/OffloadBundler.cpp

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1146,12 +1146,11 @@ class ArchiveFileHandler final : public FileHandler {
11461146
Object, // Output is a single object file
11471147
Archive // Output is an archive with extracted objects
11481148
};
1149-
const OutputType Mode =
1150-
StringSwitch<OutputType>(BundlerConfig.FilesType)
1151-
.Cases("aoo", "aocx", "aocr", OutputType::FileList)
1152-
.Case("ao", OutputType::Object)
1153-
.Case("a", OutputType::Archive)
1154-
.Default(OutputType::Unknown);
1149+
const OutputType Mode = StringSwitch<OutputType>(BundlerConfig.FilesType)
1150+
.Case("aoo", OutputType::FileList)
1151+
.Case("ao", OutputType::Object)
1152+
.Case("a", OutputType::Archive)
1153+
.Default(OutputType::Unknown);
11551154

11561155
// Set contains indexes of Children that should be skipped during
11571156
// unbundling.
@@ -1274,9 +1273,6 @@ class ArchiveFileHandler final : public FileHandler {
12741273
std::unique_ptr<FileHandler> FH{nullptr};
12751274
std::unique_ptr<MemoryBuffer> Buf{nullptr};
12761275
StringRef Ext("o");
1277-
if (BundlerConfig.FilesType == "aocr" ||
1278-
BundlerConfig.FilesType == "aocx")
1279-
Ext = BundlerConfig.FilesType;
12801276

12811277
auto BinOrErr = C.getAsBinary();
12821278
if (!BinOrErr) {
@@ -1475,8 +1471,7 @@ CreateObjectFileHandler(MemoryBuffer &FirstInput,
14751471
}
14761472

14771473
static bool FilesTypeIsArchiveToList(const std::string& FilesType) {
1478-
return FilesType == "ao" || FilesType == "aoo" || FilesType == "aocr" ||
1479-
FilesType == "aocx";
1474+
return FilesType == "ao" || FilesType == "aoo";
14801475
}
14811476

14821477
static bool FilesTypeIsArchive(const std::string& FilesType) {

clang/lib/Driver/ToolChains/Clang.cpp

Lines changed: 9 additions & 135 deletions
Original file line numberDiff line numberDiff line change
@@ -9905,26 +9905,6 @@ void OffloadBundler::ConstructJob(Compilation &C, const JobAction &JA,
99059905
const ToolChain *CurTC = &getToolChain();
99069906
const Action *CurDep = JA.getInputs()[I];
99079907

9908-
// Special handling for FPGA AOC[RX] binaries that are bundled prior to
9909-
// being added to the generated archive.
9910-
llvm::Triple Triple = CurTC->getTriple();
9911-
bool IsFPGA = Triple.isSPIR() &&
9912-
Triple.getSubArch() == llvm::Triple::SPIRSubArch_fpga;
9913-
Arg *A = TCArgs.getLastArg(options::OPT_fsycl_link_EQ);
9914-
if (A && IsFPGA) {
9915-
bool IsFPGAImage = false;
9916-
IsFPGAImage = A->getValue() == StringRef("image");
9917-
if (Inputs.size() == 1) {
9918-
Triples += Action::GetOffloadKindName(CurKind);
9919-
Triples += "-fpga_";
9920-
Triples += IsFPGAImage ? "aocx" : "aocr";
9921-
if (!IsFPGAImage && !C.getDriver().IsFPGAHWMode())
9922-
Triples += "_emu";
9923-
Triples += "-intel-unknown";
9924-
continue;
9925-
}
9926-
}
9927-
99289908
if (const auto *OA = dyn_cast<OffloadAction>(CurDep)) {
99299909
CurTC = nullptr;
99309910
OA->doOnEachDependence([&](Action *A, const ToolChain *TC, const char *) {
@@ -10073,112 +10053,43 @@ void OffloadBundler::ConstructJobMultipleOutputs(
1007310053
const char *InputFileName = Input.getFilename();
1007410054
types::ID InputType(Input.getType());
1007510055
bool IsFPGADepUnbundle = JA.getType() == types::TY_FPGA_Dependencies;
10076-
bool IsFPGADepLibUnbundle = JA.getType() == types::TY_FPGA_Dependencies_List;
1007710056
InputInfoList ForeachInputs;
1007810057
if (InputType == types::TY_Tempfilelist)
1007910058
ForeachInputs.push_back(Input);
10080-
10081-
if (InputType == types::TY_FPGA_AOCX || InputType == types::TY_FPGA_AOCR ||
10082-
InputType == types::TY_FPGA_AOCR_EMU) {
10083-
// Override type with AOCX/AOCR which will unbundle to a list containing
10084-
// binaries with the appropriate extension (.aocx/.aocr)
10085-
// TODO - representation of the output file from the unbundle for these
10086-
// types (aocx/aocr) are always list files. We should represent this
10087-
// better in the output extension and type for improved understanding
10088-
// of file contents and debuggability.
10089-
TypeArg = (InputType == types::TY_FPGA_AOCX) ? "aocx" : "aocr";
10090-
// When the output is a Tempfilelist, we know we are unbundling
10091-
// the .bc files from the archive.
10092-
if (!getToolChain().getTriple().isSPIROrSPIRV() ||
10093-
JA.getType() == types::TY_Tempfilelist)
10094-
TypeArg = "aoo";
10095-
}
10096-
if (InputType == types::TY_FPGA_AOCO || IsFPGADepLibUnbundle)
10097-
TypeArg = "aoo";
1009810059
if (IsFPGADepUnbundle)
1009910060
TypeArg = "o";
1010010061

1010110062
bool HasSPIRTarget = false;
10102-
bool HasFPGATarget = false;
1010310063
auto SYCLTCRange = C.getOffloadToolChains<Action::OFK_SYCL>();
1010410064
for (auto TI = SYCLTCRange.first, TE = SYCLTCRange.second; TI != TE; ++TI) {
1010510065
llvm::Triple TT(TI->second->getTriple());
10106-
if (TT.isSPIROrSPIRV()) {
10066+
if (TT.isSPIROrSPIRV())
1010710067
HasSPIRTarget = true;
10108-
if (TT.getSubArch() == llvm::Triple::SPIRSubArch_fpga)
10109-
HasFPGATarget = true;
10110-
}
1011110068
}
1011210069
if (InputType == types::TY_Archive && HasSPIRTarget)
1011310070
TypeArg = "aoo";
1011410071

1011510072
// Get the type.
1011610073
CmdArgs.push_back(TCArgs.MakeArgString(Twine("-type=") + TypeArg));
1011710074

10118-
// For FPGA Archives that contain AOCO in them, we only want to unbundle
10119-
// the objects from the archive that do not have AOCO associated in that
10120-
// specific object. Only do this when in hardware mode.
10121-
if (InputType == types::TY_Archive && HasFPGATarget && !IsFPGADepUnbundle &&
10122-
!IsFPGADepLibUnbundle && C.getDriver().IsFPGAHWMode()) {
10123-
llvm::Triple TT;
10124-
TT.setArchName(types::getTypeName(types::TY_FPGA_AOCO));
10125-
TT.setVendorName("intel");
10126-
TT.setOS(getToolChain().getTriple().getOS());
10127-
SmallString<128> ExcludedTargets("-excluded-targets=");
10128-
ExcludedTargets += "sycl-";
10129-
ExcludedTargets += TT.normalize();
10130-
CmdArgs.push_back(TCArgs.MakeArgString(ExcludedTargets));
10131-
}
10132-
1013310075
// Get the targets.
1013410076
SmallString<128> Triples;
1013510077
Triples += "-targets=";
1013610078
auto DepInfo = UA.getDependentActionsInfo();
1013710079
for (unsigned I = 0, J = 0; I < DepInfo.size(); ++I) {
1013810080
auto &Dep = DepInfo[I];
10139-
// FPGA device triples are 'transformed' for the bundler when creating
10140-
// aocx or aocr type bundles. Also, we only do a specific target
10141-
// unbundling, skipping the host side or device side.
10142-
if (types::isFPGA(InputType) || InputType == types::TY_Tempfilelist) {
10081+
// We only do a specific target unbundling, skipping the host side or
10082+
// device side.
10083+
if (InputType == types::TY_Tempfilelist) {
1014310084
if (getToolChain().getTriple().isSPIROrSPIRV()) {
10144-
if (Dep.DependentToolChain->getTriple().getSubArch() ==
10145-
llvm::Triple::SPIRSubArch_fpga) {
10146-
StringRef TypeName(types::getTypeName(InputType));
10147-
types::ID Type = UA.getDependentType();
10148-
if (InputType == types::TY_Tempfilelist && Type != types::TY_Nothing)
10149-
TypeName = types::getTypeName(Type);
10150-
if (J++)
10151-
Triples += ',';
10152-
llvm::Triple TT;
10153-
TT.setArchName(TypeName);
10154-
TT.setVendorName("intel");
10155-
TT.setOS(getToolChain().getTriple().getOS());
10156-
if ((InputType == types::TY_FPGA_AOCX ||
10157-
InputType == types::TY_FPGA_AOCR ||
10158-
InputType == types::TY_FPGA_AOCR_EMU) &&
10159-
JA.getType() == types::TY_Tempfilelist)
10160-
// AOCX device and AOCR bc info is bundled in the host kind
10161-
Triples += "host-";
10162-
else
10163-
// AOCR device is bundled in the sycl kind
10164-
Triples += "sycl-";
10165-
Triples += TT.normalize();
10166-
continue;
10167-
} else if (Dep.DependentOffloadKind == Action::OFK_Host) {
10168-
// No host unbundle for FPGA binaries.
10085+
if (Dep.DependentOffloadKind == Action::OFK_Host)
1016910086
continue;
10170-
}
1017110087
} else if (Dep.DependentOffloadKind == Action::OFK_SYCL)
1017210088
continue;
10173-
} else if (InputType == types::TY_Archive ||
10174-
(getToolChain().getTriple().getSubArch() ==
10175-
llvm::Triple::SPIRSubArch_fpga &&
10176-
TCArgs.hasArg(options::OPT_fsycl_link_EQ))) {
10089+
} else if (InputType == types::TY_Archive) {
1017710090
// Do not extract host part if we are unbundling archive on Windows
1017810091
// because it is not needed. Static offload libraries are added to the
10179-
// host link command just as normal libraries. Do not extract the host
10180-
// part from FPGA -fsycl-link unbundles either, as the full obj
10181-
// is used in the final link
10092+
// host link command just as normal libraries.
1018210093
if (Dep.DependentOffloadKind == Action::OFK_Host)
1018310094
continue;
1018410095
}
@@ -10231,7 +10142,7 @@ void OffloadBundler::ConstructJobMultipleOutputs(
1023110142
Triples += GPUArchName.str();
1023210143
}
1023310144
}
10234-
if (IsFPGADepUnbundle || IsFPGADepLibUnbundle) {
10145+
if (IsFPGADepUnbundle) {
1023510146
// TODO - We are currently using the target triple inputs to slot a location
1023610147
// of the dependency information into the bundle. It would be good to
1023710148
// separate this out to an explicit option in the bundler for the dependency
@@ -10259,7 +10170,7 @@ void OffloadBundler::ConstructJobMultipleOutputs(
1025910170
// When dealing with -fintelfpga, there is an additional unbundle step
1026010171
// that occurs for the dependency file. In that case, do not use the
1026110172
// dependent information, but just the output file.
10262-
if (IsFPGADepUnbundle || IsFPGADepLibUnbundle) {
10173+
if (IsFPGADepUnbundle) {
1026310174
SmallString<128> UB;
1026410175
UB += "-output=";
1026510176
UB += Outputs[0].getFilename();
@@ -10382,8 +10293,6 @@ void OffloadWrapper::ConstructJob(Compilation &C, const JobAction &JA,
1038210293

1038310294
llvm::Triple TT = getToolChain().getTriple();
1038410295
SmallString<128> TargetTripleOpt = TT.getArchName();
10385-
bool WrapFPGADevice = false;
10386-
bool FPGAEarly = false;
1038710296

1038810297
// Validate and propogate CLI options related to device image compression.
1038910298
// -offload-compress
@@ -10397,32 +10306,9 @@ void OffloadWrapper::ConstructJob(Compilation &C, const JobAction &JA,
1039710306
Twine("-offload-compression-level=") + A->getValue()));
1039810307
}
1039910308

10400-
if (Arg *A = C.getInputArgs().getLastArg(options::OPT_fsycl_link_EQ)) {
10401-
WrapFPGADevice = true;
10402-
FPGAEarly = (A->getValue() == StringRef("early"));
10403-
// When wrapping an FPGA aocx binary to archive, do not emit registration
10404-
// functions
10405-
if (A->getValue() == StringRef("image"))
10406-
WrapperArgs.push_back(C.getArgs().MakeArgString("--emit-reg-funcs=0"));
10407-
}
1040810309
addRunTimeWrapperOpts(C, OffloadingKind, TCArgs, WrapperArgs,
1040910310
getToolChain(), JA);
1041010311

10411-
// When wrapping an FPGA device binary, we need to be sure to apply the
10412-
// appropriate triple that corresponds (fpga_aocr-intel-<os>)
10413-
// to the target triple setting.
10414-
if (TT.getSubArch() == llvm::Triple::SPIRSubArch_fpga && WrapFPGADevice) {
10415-
SmallString<16> FPGAArch("fpga_");
10416-
if (FPGAEarly) {
10417-
FPGAArch += "aocr";
10418-
if (C.getDriver().IsFPGAEmulationMode())
10419-
FPGAArch += "_emu";
10420-
} else
10421-
FPGAArch += "aocx";
10422-
TT.setArchName(FPGAArch);
10423-
TT.setVendorName("intel");
10424-
TargetTripleOpt = TT.str();
10425-
}
1042610312
const toolchains::SYCLToolChain &TC =
1042710313
static_cast<const toolchains::SYCLToolChain &>(getToolChain());
1042810314
bool IsEmbeddedIR = cast<OffloadWrapperJobAction>(JA).isEmbeddedIR();
@@ -10449,18 +10335,6 @@ void OffloadWrapper::ConstructJob(Compilation &C, const JobAction &JA,
1044910335
WrapperArgs.push_back(
1045010336
C.getArgs().MakeArgString(Twine("-kind=") + Twine(Kind)));
1045110337

10452-
// For FPGA toolchains, we can provide previously wrapped bc input files to
10453-
// the wrapper step. This is done for AOCR based files that will need the
10454-
// Symbols and Properties from a previous compilation step.
10455-
if (TC.getTriple().isSPIR() && Inputs.size() == 2 &&
10456-
TC.getTriple().getSubArch() == llvm::Triple::SPIRSubArch_fpga) {
10457-
// If there is an additional input argument passed in, that is considered
10458-
// the .bc file to include in this wrapping job.
10459-
const InputInfo &I = Inputs[1];
10460-
WrapperArgs.push_back(C.getArgs().MakeArgString(
10461-
Twine("--sym-prop-bc-files=") + I.getFilename()));
10462-
}
10463-
1046410338
assert((Inputs.size() > 0) && "no inputs for clang-offload-wrapper");
1046510339
assert(((Inputs[0].getType() != types::TY_Tempfiletable) ||
1046610340
(Inputs.size() == 1)) &&

clang/lib/Driver/ToolChains/SYCL.cpp

Lines changed: 2 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1167,9 +1167,7 @@ void SYCL::fpga::BackendCompiler::constructOpenCLAOTCommand(
11671167
ArgStringList CmdArgs{"-device=fpga_fast_emu"};
11681168

11691169
for (const auto &II : Inputs) {
1170-
if (II.getType() == types::TY_TempAOCOfilelist ||
1171-
II.getType() == types::TY_FPGA_Dependencies ||
1172-
II.getType() == types::TY_FPGA_Dependencies_List)
1170+
if (II.getType() == types::TY_FPGA_Dependencies)
11731171
continue;
11741172
if (II.getType() == types::TY_Tempfilelist)
11751173
ForeachInputs.push_back(II);
@@ -1235,31 +1233,13 @@ void SYCL::fpga::BackendCompiler::ConstructJob(
12351233
std::string Filename(II.getFilename());
12361234
if (II.getType() == types::TY_Tempfilelist)
12371235
ForeachInputs.push_back(II);
1238-
if (II.getType() == types::TY_TempAOCOfilelist)
1239-
// Add any FPGA library lists. These come in as special tempfile lists.
1240-
CmdArgs.push_back(Args.MakeArgString(Twine("-library-list=") + Filename));
1241-
else if (II.getType() == types::TY_FPGA_Dependencies ||
1242-
II.getType() == types::TY_FPGA_Dependencies_List)
1236+
else if (II.getType() == types::TY_FPGA_Dependencies)
12431237
FPGADepFiles.push_back(II);
12441238
else
12451239
CmdArgs.push_back(C.getArgs().MakeArgString(Filename));
1246-
// Check for any AOCR input, if found use that as the project report name
12471240
StringRef Ext(llvm::sys::path::extension(Filename));
12481241
if (Ext.empty())
12491242
continue;
1250-
if (getToolChain().LookupTypeForExtension(Ext.drop_front()) ==
1251-
types::TY_FPGA_AOCR) {
1252-
// Keep the base of the .aocr file name. Input file is a temporary,
1253-
// so we are stripping off the additional naming information for a
1254-
// cleaner name. The suffix being stripped from the name is the
1255-
// added temporary string and the extension.
1256-
StringRef SuffixFormat("-XXXXXX.aocr");
1257-
SmallString<128> NameBase(
1258-
Filename.substr(0, Filename.length() - SuffixFormat.size()));
1259-
NameBase.append(".prj");
1260-
CreatedReportName =
1261-
Args.MakeArgString(llvm::sys::path::filename(NameBase));
1262-
}
12631243
}
12641244
CmdArgs.push_back("-sycl");
12651245

@@ -1309,8 +1289,6 @@ void SYCL::fpga::BackendCompiler::ConstructJob(
13091289
for (unsigned I = 0; I < FPGADepFiles.size(); ++I) {
13101290
if (I)
13111291
DepOpt += ',';
1312-
if (FPGADepFiles[I].getType() == types::TY_FPGA_Dependencies_List)
1313-
DepOpt += "@";
13141292
DepOpt += FPGADepFiles[I].getFilename();
13151293
}
13161294
CmdArgs.push_back(C.getArgs().MakeArgString(DepOpt));

clang/lib/Driver/Types.cpp

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -301,19 +301,6 @@ bool types::isHIP(ID Id) {
301301
}
302302
}
303303

304-
bool types::isFPGA(ID Id) {
305-
switch (Id) {
306-
default:
307-
return false;
308-
309-
case TY_FPGA_AOCR:
310-
case TY_FPGA_AOCX:
311-
case TY_FPGA_AOCO:
312-
case TY_FPGA_AOCR_EMU:
313-
return true;
314-
}
315-
}
316-
317304
bool types::isArchive(ID Id) {
318305
switch (Id) {
319306
default:
@@ -399,8 +386,6 @@ types::ID types::lookupTypeForExtension(llvm::StringRef Ext) {
399386
.Case("cppm", TY_CXXModule)
400387
.Case("cxxm", TY_CXXModule)
401388
.Case("hlsl", TY_HLSL)
402-
.Case("aocr", TY_FPGA_AOCR)
403-
.Case("aocx", TY_FPGA_AOCX)
404389
.Default(TY_INVALID);
405390
}
406391

clang/test/Driver/sycl-offload-old-model.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -120,13 +120,13 @@
120120

121121
// Device section checking only occur when offloading is enabled
122122
// RUN: %clangxx -### -target x86_64-unknown-linux-gnu -fsycl --no-offload-new-driver %S/Inputs/SYCL/liblin64.a %s 2>&1 \
123-
// RUN: | FileCheck -check-prefix CHECK_SECTION %s
123+
// RUN: | FileCheck -check-prefix CHECK_LIST %s
124124
// RUN: %clangxx -### -target x86_64-unknown-linux-gnu -fsycl --no-offload-new-driver -L%S/Inputs/SYCL -l:liblin64.a %s 2>&1 \
125-
// RUN: | FileCheck -check-prefix CHECK_SECTION %s
125+
// RUN: | FileCheck -check-prefix CHECK_LIST %s
126126
// RUN: %clangxx -### -target x86_64-unknown-linux-gnu %S/Inputs/SYCL/liblin64.a %s 2>&1 \
127-
// RUN: | FileCheck -check-prefix NO_CHECK_SECTION %s
128-
// CHECK_SECTION: {{(/|\\)}}clang-offload-bundler{{.*}} "-type=ao"{{.*}} "-check-section"
129-
// NO_CHECK_SECTION-NOT: clang-offload-bundler{{.*}} "-type=ao"{{.*}} "-check-section"
127+
// RUN: | FileCheck -check-prefix NO_CHECK_LIST %s
128+
// CHECK_LIST: {{(/|\\)}}clang-offload-bundler{{.*}} "-type=ao"{{.*}} "-list"
129+
// NO_CHECK_LIST-NOT: clang-offload-bundler{{.*}} "-type=ao"{{.*}} "-list"
130130

131131
/// Check -fsycl-targets=spir64 enables addition of -ffine-grained-bitfield-accesses option
132132
// RUN: %clangxx -### -fsycl-device-only %s 2>&1 | FileCheck -check-prefixes=CHECK_BITFIELD_OPTION %s

0 commit comments

Comments
 (0)