Skip to content

Commit 1d54cbb

Browse files
author
iclsrc
committed
Merge from 'sycl' to 'sycl-web'
2 parents dd3a824 + d4c1ed9 commit 1d54cbb

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+1872
-447
lines changed

clang/include/clang/Driver/Driver.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -540,6 +540,11 @@ class Driver {
540540
/// GCC goes to extra lengths here to be a bit more robust.
541541
std::string GetTemporaryPath(StringRef Prefix, StringRef Suffix) const;
542542

543+
/// GetUniquePath = Return the pathname of a unique file to use
544+
/// as part of compilation. The file will have the given base name (BaseName)
545+
/// and extension (Ext).
546+
std::string GetUniquePath(StringRef BaseName, StringRef Ext) const;
547+
543548
/// GetTemporaryDirectory - Return the pathname of a temporary directory to
544549
/// use as part of compilation; the directory will have the given prefix.
545550
std::string GetTemporaryDirectory(StringRef Prefix) const;

clang/lib/Basic/Targets/SPIR.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -135,8 +135,9 @@ class LLVM_LIBRARY_VISIBILITY SPIR32TargetInfo : public SPIRTargetInfo {
135135
PointerWidth = PointerAlign = 32;
136136
SizeType = TargetInfo::UnsignedInt;
137137
PtrDiffType = IntPtrType = TargetInfo::SignedInt;
138-
resetDataLayout("e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-"
139-
"v96:128-v192:256-v256:256-v512:512-v1024:1024");
138+
resetDataLayout(
139+
"e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-"
140+
"v96:128-v192:256-v256:256-v512:512-v1024:1024-n8:16:32:64");
140141
}
141142

142143
void getTargetDefines(const LangOptions &Opts,
@@ -151,8 +152,9 @@ class LLVM_LIBRARY_VISIBILITY SPIR64TargetInfo : public SPIRTargetInfo {
151152
SizeType = TargetInfo::UnsignedLong;
152153
PtrDiffType = IntPtrType = TargetInfo::SignedLong;
153154

154-
resetDataLayout("e-i64:64-v16:16-v24:32-v32:32-v48:64-"
155-
"v96:128-v192:256-v256:256-v512:512-v1024:1024");
155+
resetDataLayout(
156+
"e-i64:64-v16:16-v24:32-v32:32-v48:64-"
157+
"v96:128-v192:256-v256:256-v512:512-v1024:1024-n8:16:32:64");
156158
}
157159

158160
void getTargetDefines(const LangOptions &Opts,

clang/lib/CodeGen/BackendUtil.cpp

Lines changed: 49 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -602,19 +602,51 @@ void EmitAssemblyHelper::CreatePasses(legacy::PassManager &MPM,
602602
CodeGenOpts.PrepareForThinLTO));
603603
}
604604

605-
PMBuilder.OptLevel = CodeGenOpts.OptimizationLevel;
606-
PMBuilder.SizeLevel = CodeGenOpts.OptimizeSize;
607-
PMBuilder.SLPVectorize = CodeGenOpts.VectorizeSLP;
608-
PMBuilder.LoopVectorize = CodeGenOpts.VectorizeLoop;
609-
610-
PMBuilder.DisableUnrollLoops = !CodeGenOpts.UnrollLoops;
611-
// Loop interleaving in the loop vectorizer has historically been set to be
612-
// enabled when loop unrolling is enabled.
613-
PMBuilder.LoopsInterleaved = CodeGenOpts.UnrollLoops;
614-
PMBuilder.MergeFunctions = CodeGenOpts.MergeFunctions;
615-
PMBuilder.PrepareForThinLTO = CodeGenOpts.PrepareForThinLTO;
616-
PMBuilder.PrepareForLTO = CodeGenOpts.PrepareForLTO;
617-
PMBuilder.RerollLoops = CodeGenOpts.RerollLoops;
605+
// FIXME: This code is a workaround for a number of problems with optimized
606+
// SYCL code for the SPIR target. This change trying to balance between doing
607+
// too few and too many optimizations. The current approach is to disable as
608+
// much as possible just to keep the compiler functional. Eventually we can
609+
// consider allowing -On option to configure the optimization set for the FE
610+
// device compiler as well, but before that we must fix all the functional and
611+
// performance issues caused by LLVM transformantions.
612+
// E.g. LLVM optimizations make use of llvm intrinsics, instructions, data
613+
// types, etc., which are not supported by the SPIR-V translator (current
614+
// "back-end" for SYCL device compiler).
615+
// NOTE: We use "normal" inliner (i.e. from O2/O3), but limit the rest of
616+
// optimization pipeline. Inliner is a must for enabling size reduction
617+
// optimizations.
618+
if (LangOpts.SYCLIsDevice && TargetTriple.isSPIR()) {
619+
PMBuilder.OptLevel = 1;
620+
PMBuilder.SizeLevel = 2;
621+
PMBuilder.SLPVectorize = false;
622+
PMBuilder.LoopVectorize = false;
623+
PMBuilder.DivergentTarget = true;
624+
PMBuilder.DisableGVNLoadPRE = true;
625+
PMBuilder.ForgetAllSCEVInLoopUnroll = true;
626+
627+
PMBuilder.DisableUnrollLoops = true;
628+
// Loop interleaving in the loop vectorizer has historically been set to be
629+
// enabled when loop unrolling is enabled.
630+
PMBuilder.LoopsInterleaved = false;
631+
PMBuilder.MergeFunctions = false;
632+
PMBuilder.PrepareForThinLTO = false;
633+
PMBuilder.PrepareForLTO = false;
634+
PMBuilder.RerollLoops = false;
635+
} else {
636+
PMBuilder.OptLevel = CodeGenOpts.OptimizationLevel;
637+
PMBuilder.SizeLevel = CodeGenOpts.OptimizeSize;
638+
PMBuilder.SLPVectorize = CodeGenOpts.VectorizeSLP;
639+
PMBuilder.LoopVectorize = CodeGenOpts.VectorizeLoop;
640+
641+
PMBuilder.DisableUnrollLoops = !CodeGenOpts.UnrollLoops;
642+
// Loop interleaving in the loop vectorizer has historically been set to be
643+
// enabled when loop unrolling is enabled.
644+
PMBuilder.LoopsInterleaved = CodeGenOpts.UnrollLoops;
645+
PMBuilder.MergeFunctions = CodeGenOpts.MergeFunctions;
646+
PMBuilder.PrepareForThinLTO = CodeGenOpts.PrepareForThinLTO;
647+
PMBuilder.PrepareForLTO = CodeGenOpts.PrepareForLTO;
648+
PMBuilder.RerollLoops = CodeGenOpts.RerollLoops;
649+
}
618650

619651
MPM.add(new TargetLibraryInfoWrapperPass(*TLII));
620652

@@ -868,14 +900,15 @@ void EmitAssemblyHelper::EmitAssembly(BackendAction Action,
868900

869901
std::unique_ptr<llvm::ToolOutputFile> ThinLinkOS, DwoOS;
870902

903+
// Clean-up SYCL device code if LLVM passes are disabled
904+
if (LangOpts.SYCLIsDevice && CodeGenOpts.DisableLLVMPasses)
905+
PerModulePasses.add(createDeadCodeEliminationPass());
906+
871907
switch (Action) {
872908
case Backend_EmitNothing:
873909
break;
874910

875911
case Backend_EmitBC:
876-
if (LangOpts.SYCLIsDevice) {
877-
PerModulePasses.add(createDeadCodeEliminationPass());
878-
}
879912
if (CodeGenOpts.PrepareForThinLTO && !CodeGenOpts.DisableLLVMPasses) {
880913
if (!CodeGenOpts.ThinLinkBitcodeFile.empty()) {
881914
ThinLinkOS = openOutputFile(CodeGenOpts.ThinLinkBitcodeFile);
@@ -1350,9 +1383,6 @@ void EmitAssemblyHelper::EmitAssemblyWithNewPassManager(
13501383
break;
13511384

13521385
case Backend_EmitBC:
1353-
if (LangOpts.SYCLIsDevice) {
1354-
CodeGenPasses.add(createDeadCodeEliminationPass());
1355-
}
13561386
if (CodeGenOpts.PrepareForThinLTO && !CodeGenOpts.DisableLLVMPasses) {
13571387
if (!CodeGenOpts.ThinLinkBitcodeFile.empty()) {
13581388
ThinLinkOS = openOutputFile(CodeGenOpts.ThinLinkBitcodeFile);

clang/lib/Driver/Driver.cpp

Lines changed: 53 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2537,12 +2537,18 @@ static bool runBundler(const SmallVectorImpl<StringRef> &BundlerArgs,
25372537

25382538
bool hasFPGABinary(Compilation &C, std::string Object, types::ID Type) {
25392539
assert(types::isFPGA(Type) && "unexpected Type for FPGA binary check");
2540+
// Do not do the check if the file doesn't exist
2541+
if (!llvm::sys::fs::exists(Object))
2542+
return false;
2543+
25402544
// Temporary names for the output.
25412545
llvm::Triple TT;
25422546
TT.setArchName(types::getTypeName(Type));
25432547
TT.setVendorName("intel");
25442548
TT.setOS(llvm::Triple::UnknownOS);
25452549
TT.setEnvironment(llvm::Triple::SYCLDevice);
2550+
if (C.getDriver().IsCLMode())
2551+
TT.setObjectFormat(llvm::Triple::COFF);
25462552

25472553
// Checking uses -check-section option with the input file, no output
25482554
// file and the target triple being looked for.
@@ -4797,6 +4803,10 @@ void Driver::BuildActions(Compilation &C, DerivedArgList &Args,
47974803
// archive unbundling for Windows.
47984804
if (!isStaticArchiveFile(LA))
47994805
continue;
4806+
// FPGA AOCX files are archives, but we do not want to unbundle them here
4807+
// as they have already been unbundled and processed for linking.
4808+
if (hasFPGABinary(C, LA.str(), types::TY_FPGA_AOCX))
4809+
continue;
48004810
// In MSVC environment offload-static-libs are handled slightly different
48014811
// because of missing support for partial linking in the linker. We add an
48024812
// unbundling action for each static archive which produces list files with
@@ -6074,21 +6084,38 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA,
60746084
NamedOutput = C.getArgs().MakeArgString(TempPath.c_str());
60756085
}
60766086

6077-
// If we're saving temps and the temp file conflicts with the input file,
6078-
// then avoid overwriting input file.
6079-
if (!AtTopLevel && isSaveTempsEnabled() && NamedOutput == BaseName) {
6080-
bool SameFile = false;
6081-
SmallString<256> Result;
6082-
llvm::sys::fs::current_path(Result);
6083-
llvm::sys::path::append(Result, BaseName);
6084-
llvm::sys::fs::equivalent(BaseInput, Result.c_str(), SameFile);
6085-
// Must share the same path to conflict.
6086-
if (SameFile) {
6087-
StringRef Name = llvm::sys::path::filename(BaseInput);
6088-
std::pair<StringRef, StringRef> Split = Name.split('.');
6089-
std::string TmpName = GetTemporaryPath(
6087+
if (isSaveTempsEnabled()) {
6088+
// If we're saving temps and the temp file conflicts with any
6089+
// input/resulting file, then avoid overwriting.
6090+
if (!AtTopLevel) {
6091+
bool SameFile = false;
6092+
SmallString<256> Result;
6093+
llvm::sys::fs::current_path(Result);
6094+
llvm::sys::path::append(Result, BaseName);
6095+
llvm::sys::fs::equivalent(BaseInput, Result.c_str(), SameFile);
6096+
// Must share the same path to conflict.
6097+
if (SameFile) {
6098+
StringRef Name = llvm::sys::path::filename(BaseInput);
6099+
std::pair<StringRef, StringRef> Split = Name.split('.');
6100+
std::string TmpName = GetTemporaryPath(
6101+
Split.first, types::getTypeTempSuffix(JA.getType(), IsCLMode()));
6102+
return C.addTempFile(C.getArgs().MakeArgString(TmpName));
6103+
}
6104+
}
6105+
6106+
const auto &ResultFiles = C.getResultFiles();
6107+
const auto CollidingFilenameIt =
6108+
llvm::find_if(ResultFiles, [NamedOutput](const auto &It) {
6109+
return StringRef(NamedOutput).equals(It.second);
6110+
});
6111+
if (CollidingFilenameIt != ResultFiles.end()) {
6112+
// Upon any collision, a unique hash will be appended to the filename,
6113+
// similar to what is done for temporary files in the regular flow.
6114+
StringRef CollidingName(CollidingFilenameIt->second);
6115+
std::pair<StringRef, StringRef> Split = CollidingName.split('.');
6116+
std::string UniqueName = GetUniquePath(
60906117
Split.first, types::getTypeTempSuffix(JA.getType(), IsCLMode()));
6091-
return C.addTempFile(C.getArgs().MakeArgString(TmpName));
6118+
return C.addResultFile(C.getArgs().MakeArgString(UniqueName), &JA);
60926119
}
60936120
}
60946121

@@ -6218,6 +6245,18 @@ std::string Driver::GetTemporaryPath(StringRef Prefix, StringRef Suffix) const {
62186245
return std::string(Path.str());
62196246
}
62206247

6248+
std::string Driver::GetUniquePath(StringRef BaseName, StringRef Ext) const {
6249+
SmallString<128> Path;
6250+
std::error_code EC = llvm::sys::fs::createUniqueFile(
6251+
Twine(BaseName) + Twine("-%%%%%%.") + Ext, Path);
6252+
if (EC) {
6253+
Diag(clang::diag::err_unable_to_make_temp) << EC.message();
6254+
return "";
6255+
}
6256+
6257+
return std::string(Path.str());
6258+
}
6259+
62216260
std::string Driver::GetTemporaryDirectory(StringRef Prefix) const {
62226261
SmallString<128> Path;
62236262
std::error_code EC = llvm::sys::fs::createUniqueDirectory(Prefix, Path);

clang/lib/Driver/ToolChains/Clang.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7288,6 +7288,8 @@ void OffloadBundler::ConstructJobMultipleOutputs(
72887288
TT.setVendorName("intel");
72897289
TT.setOS(getToolChain().getTriple().getOS());
72907290
TT.setEnvironment(llvm::Triple::SYCLDevice);
7291+
if (C.getDriver().IsCLMode())
7292+
TT.setObjectFormat(llvm::Triple::COFF);
72917293
Triples += "sycl-";
72927294
Triples += TT.normalize();
72937295
} else if (getToolChain().getTriple().getSubArch() !=

clang/test/CodeGen/target-data.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -237,11 +237,11 @@
237237

238238
// RUN: %clang_cc1 -triple spir-unknown -o - -emit-llvm %s | \
239239
// RUN: FileCheck %s -check-prefix=SPIR
240-
// SPIR: target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
240+
// SPIR: target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-n8:16:32:64"
241241

242242
// RUN: %clang_cc1 -triple spir64-unknown -o - -emit-llvm %s | \
243243
// RUN: FileCheck %s -check-prefix=SPIR64
244-
// SPIR64: target datalayout = "e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
244+
// SPIR64: target datalayout = "e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-n8:16:32:64"
245245

246246
// RUN: %clang_cc1 -triple bpfel -o - -emit-llvm %s | \
247247
// RUN: FileCheck %s -check-prefix=BPFEL

clang/test/CodeGenOpenCL/convergent.cl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ void test_unroll() {
121121

122122
// The new PM produces a slightly different IR for the loop from the legacy PM,
123123
// but the test still checks that the loop is not unrolled.
124-
// CHECK-LEGACY: br i1 %{{.+}}, label %[[for_body]], label %[[for_cond_cleanup]]
124+
// CHECK-LEGACY: br i1 %{{.+}}, label %[[for_cond_cleanup]], label %[[for_body]]
125125
// CHECK-NEW: br i1 %{{.+}}, label %[[for_body_crit_edge:.+]], label %[[for_cond_cleanup]]
126126
// CHECK-NEW: [[for_body_crit_edge]]:
127127

clang/test/CodeGenSYCL/address-space-swap.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %clang -fsycl-device-only -S -emit-llvm %s -o - | FileCheck %s
1+
// RUN: %clang -fsycl-device-only -S -Xclang -disable-llvm-passes -emit-llvm %s -o - | FileCheck %s
22
#include <algorithm>
33

44
void test() {

clang/test/CodeGenSYCL/debug-info-srcpos-kernel.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %clang -fsycl-device-only %s -S -I %S/Inputs -emit-llvm -g -o - | FileCheck %s
1+
// RUN: %clang -fsycl-device-only %s -S -emit-llvm -O0 -I %S/Inputs -g -o - | FileCheck %s
22
//
33
// Verify the SYCL kernel routine is marked artificial and has no source
44
// correlation.

clang/test/Driver/sycl-offload-intelfpga.cpp

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -126,9 +126,12 @@
126126
// RUN: clang-offload-wrapper -o %t-aocx.bc -host=x86_64-unknown-linux-gnu -kind=sycl -target=fpga_aocx-intel-unknown-sycldevice %t.aocx
127127
// RUN: llc -filetype=obj -o %t-aocx.o %t-aocx.bc
128128
// RUN: llvm-ar crv %t_aocx.a %t.o %t-aocx.o
129+
// RUN: clang-offload-wrapper -o %t-aocx_cl.bc -host=x86_64-unknown-linux-gnu -kind=sycl -target=fpga_aocx-intel-unknown-sycldevice-coff %t.aocx
130+
// RUN: llc -filetype=obj -o %t-aocx_cl.o %t-aocx_cl.bc
131+
// RUN: llvm-ar crv %t_aocx_cl.a %t.o %t-aocx_cl.o
129132
// RUN: %clangxx -target x86_64-unknown-linux-gnu -fsycl -fintelfpga %t_aocx.a -ccc-print-phases 2>&1 \
130133
// RUN: | FileCheck -check-prefixes=CHK-FPGA-AOCX-PHASES %s
131-
// RUN: %clang_cl -fsycl -fintelfpga %t_aocx.a -ccc-print-phases 2>&1 \
134+
// RUN: %clang_cl -fsycl -fintelfpga %t_aocx_cl.a -ccc-print-phases 2>&1 \
132135
// RUN: | FileCheck -check-prefixes=CHK-FPGA-AOCX-PHASES %s
133136
// CHK-FPGA-AOCX-PHASES: 0: input, "{{.*}}", fpga_aocx, (host-sycl)
134137
// CHK-FPGA-AOCX-PHASES: 1: linker, {0}, image, (host-sycl)
@@ -138,21 +141,24 @@
138141

139142
// RUN: %clangxx -target x86_64-unknown-linux-gnu -fsycl -fintelfpga %t_aocx.a -### 2>&1 \
140143
// RUN: | FileCheck -check-prefixes=CHK-FPGA-AOCX,CHK-FPGA-AOCX-LIN %s
141-
// RUN: %clang_cl -fsycl -fintelfpga %t_aocx.a -### 2>&1 \
144+
// RUN: %clang_cl -fsycl -fintelfpga %t_aocx_cl.a -### 2>&1 \
142145
// RUN: | FileCheck -check-prefixes=CHK-FPGA-AOCX,CHK-FPGA-AOCX-WIN %s
143-
// CHK-FPGA-AOCX: clang-offload-bundler{{.*}} "-type=ao" "-targets=sycl-fpga_aocx-intel-unknown-sycldevice" "-inputs=[[LIBINPUT:.+\.a]]" "-outputs=[[BUNDLEOUT:.+\.aocx]]" "-unbundle"
146+
// CHK-FPGA-AOCX-LIN: clang-offload-bundler{{.*}} "-type=ao" "-targets=sycl-fpga_aocx-intel-unknown-sycldevice" "-inputs=[[LIBINPUT:.+\.a]]" "-outputs=[[BUNDLEOUT:.+\.aocx]]" "-unbundle"
147+
// CHK-FPGA-AOCX-WIN: clang-offload-bundler{{.*}} "-type=ao" "-targets=sycl-fpga_aocx-intel-unknown-sycldevice-coff" "-inputs=[[LIBINPUT:.+\.a]]" "-outputs=[[BUNDLEOUT:.+\.aocx]]" "-unbundle"
144148
// CHK-FPGA-AOCX: clang-offload-wrapper{{.*}} "-o=[[WRAPOUT:.+\.bc]]" {{.*}} "-target=spir64_fpga" "-kind=sycl" "[[BUNDLEOUT]]"
145149
// CHK-FPGA-AOCX-LIN: llc{{.*}} "-filetype=obj" "-o" "[[LLCOUT:.+\.o]]" "[[WRAPOUT]]"
146150
// CHK-FPGA-AOCX-WIN: llc{{.*}} "-filetype=obj" "-o" "[[LLCOUT2:.+\.obj]]" "[[WRAPOUT]]"
151+
// CHK-FPGA-AOCX-NOT: clang-offload-bundler{{.*}} "-type=ao" "-targets=sycl-fpga_aocx-intel-unknown-sycldevice{{(-coff)?}}"
147152
// CHK-FPGA-AOCX-LIN: ld{{.*}} "[[LIBINPUT]]" "[[LLCOUT]]"
148153
// CHK-FPGA-AOCX-WIN: link{{.*}} "[[LIBINPUT]]" "[[LLCOUT2]]"
149154

150155
/// AOCX with source
151156
// RUN: %clangxx -target x86_64-unknown-linux-gnu -fsycl -fintelfpga %s %t_aocx.a -### 2>&1 \
152157
// RUN: | FileCheck -check-prefixes=CHK-FPGA-AOCX-SRC,CHK-FPGA-AOCX-SRC-LIN %s
153-
// RUN: %clang_cl -fsycl -fintelfpga %s %t_aocx.a -### 2>&1 \
158+
// RUN: %clang_cl -fsycl -fintelfpga %s %t_aocx_cl.a -### 2>&1 \
154159
// RUN: | FileCheck -check-prefixes=CHK-FPGA-AOCX-SRC,CHK-FPGA-AOCX-SRC-WIN %s
155-
// CHK-FPGA-AOCX-SRC: clang-offload-bundler{{.*}} "-type=ao" "-targets=sycl-fpga_aocx-intel-unknown-sycldevice" "-inputs=[[LIBINPUT:.+\.a]]" "-outputs=[[BUNDLEOUT:.+\.aocx]]" "-unbundle"
160+
// CHK-FPGA-AOCX-SRC-LIN: clang-offload-bundler{{.*}} "-type=ao" "-targets=sycl-fpga_aocx-intel-unknown-sycldevice" "-inputs=[[LIBINPUT:.+\.a]]" "-outputs=[[BUNDLEOUT:.+\.aocx]]" "-unbundle"
161+
// CHK-FPGA-AOCX-SRC-WIN: clang-offload-bundler{{.*}} "-type=ao" "-targets=sycl-fpga_aocx-intel-unknown-sycldevice-coff" "-inputs=[[LIBINPUT:.+\.a]]" "-outputs=[[BUNDLEOUT:.+\.aocx]]" "-unbundle"
156162
// CHK-FPGA-AOCX-SRC: clang-offload-wrapper{{.*}} "-o=[[WRAPOUT:.+\.bc]]" {{.*}} "-target=spir64_fpga" "-kind=sycl" "[[BUNDLEOUT]]"
157163
// CHK-FPGA-AOCX-SRC: llc{{.*}} "-filetype=obj" "-o" "[[LLCOUT:.+\.(o|obj)]]" "[[WRAPOUT]]"
158164
// CHK-FPGA-AOCX-SRC: clang{{.*}} "-cc1" {{.*}} "-fsycl-is-device" {{.*}} "-o" "[[DEVICEBC:.+\.bc]]"
@@ -168,9 +174,10 @@
168174
// RUN: touch %t.o
169175
// RUN: %clangxx -target x86_64-unknown-linux-gnu -fsycl -fintelfpga %t.o %t_aocx.a -### 2>&1 \
170176
// RUN: | FileCheck -check-prefixes=CHK-FPGA-AOCX-OBJ,CHK-FPGA-AOCX-OBJ-LIN %s
171-
// RUN: %clang_cl -fsycl -fintelfpga %t.o %t_aocx.a -### 2>&1 \
177+
// RUN: %clang_cl -fsycl -fintelfpga %t.o %t_aocx_cl.a -### 2>&1 \
172178
// RUN: | FileCheck -check-prefixes=CHK-FPGA-AOCX-OBJ,CHK-FPGA-AOCX-OBJ-WIN %s
173-
// CHK-FPGA-AOCX-OBJ: clang-offload-bundler{{.*}} "-type=ao" "-targets=sycl-fpga_aocx-intel-unknown-sycldevice" "-inputs=[[LIBINPUT:.+\.a]]" "-outputs=[[BUNDLEOUT:.+\.aocx]]" "-unbundle"
179+
// CHK-FPGA-AOCX-OBJ-LIN: clang-offload-bundler{{.*}} "-type=ao" "-targets=sycl-fpga_aocx-intel-unknown-sycldevice" "-inputs=[[LIBINPUT:.+\.a]]" "-outputs=[[BUNDLEOUT:.+\.aocx]]" "-unbundle"
180+
// CHK-FPGA-AOCX-OBJ-WIN: clang-offload-bundler{{.*}} "-type=ao" "-targets=sycl-fpga_aocx-intel-unknown-sycldevice-coff" "-inputs=[[LIBINPUT:.+\.a]]" "-outputs=[[BUNDLEOUT:.+\.aocx]]" "-unbundle"
174181
// CHK-FPGA-AOCX-OBJ: clang-offload-wrapper{{.*}} "-o=[[WRAPOUT:.+\.bc]]" {{.*}} "-target=spir64_fpga" "-kind=sycl" "[[BUNDLEOUT]]"
175182
// CHK-FPGA-AOCX-OBJ: llc{{.*}} "-filetype=obj" "-o" "[[LLCOUT:.+\.(o|obj)]]" "[[WRAPOUT]]"
176183
// CHK-FPGA-AOCX-OBJ: clang-offload-bundler{{.*}} "-type=o" {{.*}} "-outputs=[[HOSTOBJ:.+\.(o|obj)]],[[DEVICEOBJ:.+\.(o|obj)]]" "-unbundle"
@@ -332,8 +339,10 @@
332339
// RUN: %clang_cl -fsycl -c -o %t2_cl.o %t2.c
333340
// RUN: clang-offload-wrapper -o %t-aoco.bc -host=x86_64-unknown-linux-gnu -kind=sycl -target=fpga_aoco-intel-unknown-sycldevice %t.aoco
334341
// RUN: llc -filetype=obj -o %t-aoco.o %t-aoco.bc
342+
// RUN: clang-offload-wrapper -o %t-aoco_cl.bc -host=x86_64-unknown-linux-gnu -kind=sycl -target=fpga_aoco-intel-unknown-sycldevice-coff %t.aoco
343+
// RUN: llc -filetype=obj -o %t-aoco_cl.o %t-aoco_cl.bc
335344
// RUN: llvm-ar crv %t_aoco.a %t.o %t2.o %t-aoco.o
336-
// RUN: llvm-ar crv %t_aoco_cl.a %t.o %t2_cl.o %t-aoco.o
345+
// RUN: llvm-ar crv %t_aoco_cl.a %t.o %t2_cl.o %t-aoco_cl.o
337346
// RUN: %clangxx -target x86_64-unknown-linux-gnu -fsycl -fintelfpga -foffload-static-lib=%t_aoco.a %s -### -ccc-print-phases 2>&1 \
338347
// RUN: | FileCheck -check-prefix=CHK-FPGA-AOCO-PHASES %s
339348
// CHK-FPGA-AOCO-PHASES: 0: input, "[[INPUTA:.+\.a]]", object, (host-sycl)
@@ -403,7 +412,8 @@
403412
// CHK-FPGA-AOCO: llvm-link{{.*}} "@{{.*}}" "-o" "[[LINKEDBC:.+\.bc]]"
404413
// CHK-FPGA-AOCO: sycl-post-link{{.*}} "-ir-output-only" "-spec-const=default" "-o" "[[PLINKEDBC:.+\.bc]]" "[[LINKEDBC]]"
405414
// CHK-FPGA-AOCO: llvm-spirv{{.*}} "-o" "[[TARGSPV:.+\.spv]]" {{.*}} "[[PLINKEDBC]]"
406-
// CHK-FPGA-AOCO: clang-offload-bundler{{.*}} "-type=aoo" "-targets=sycl-fpga_aoco-intel-unknown-sycldevice" "-inputs=[[INPUTLIB]]" "-outputs=[[AOCOLIST:.+\.txt]]" "-unbundle"
415+
// CHK-FPGA-AOCO-LIN: clang-offload-bundler{{.*}} "-type=aoo" "-targets=sycl-fpga_aoco-intel-unknown-sycldevice" "-inputs=[[INPUTLIB]]" "-outputs=[[AOCOLIST:.+\.txt]]" "-unbundle"
416+
// CHK-FPGA-AOCO-WIN: clang-offload-bundler{{.*}} "-type=aoo" "-targets=sycl-fpga_aoco-intel-unknown-sycldevice-coff" "-inputs=[[INPUTLIB]]" "-outputs=[[AOCOLIST:.+\.txt]]" "-unbundle"
407417
// CHK-FPGA-AOCO: aoc{{.*}} "-o" "[[AOCXOUT:.+\.aocx]]" "[[TARGSPV]]" "-library-list=[[AOCOLIST]]" "-sycl"
408418
// CHK-FPGA-AOCO: clang-offload-wrapper{{.*}} "-o=[[FINALBC:.+\.bc]]" {{.*}} "-target=spir64_fpga" "-kind=sycl" "[[AOCXOUT]]"
409419
// CHK-FPGA-AOCO-LIN: llc{{.*}} "-filetype=obj" "-o" "[[FINALOBJL:.+\.o]]" "[[FINALBC]]"

0 commit comments

Comments
 (0)