Skip to content

Commit 7a24da3

Browse files
author
Alexander Batashev
committed
Merge remote-tracking branch 'origin/sycl' into private/abatashe/basic_abi_checks
* origin/sycl: [SYCL][Driver] Enforce unique filenames when -save-temps is used (intel#1545) [SYCL] [xmethods] Allow replacing xmethod script (intel#1532) [SYCL] Add tests for inline asm feature (intel#1444) [SYCL][Doc] Add device_specific_kernel_queries extension. (intel#1540) [SYCL][USM] Remove unused header and unnecessary includes (intel#1537) Fix check-llvm dependencies (intel#1547) [SYCL] Add __SYCL_EXPORT to declaration of contextSetExtendedDeleter (intel#1531) [SYCL][Doc] Add static local memory query extension. (intel#1539) [SYCL][Doc] Add sycl_bitcast extension (intel#1541) [SYCL][NFC] Temporarily disable sporadically failing test (intel#1533) [SYCL][NFC] Adjust codeowners for sycl directory (intel#1529) [SYCL] Fix processing of spec consts referenced twice (intel#1524) [SYCL] Use correct macro name in export.hpp (intel#1527) [Driver][NFC] Fix -help information for -Xs options (intel#1530) [SYCL][Doc] Add Graph Scheduler design documentation (intel#1457) [SYCL] Add diagnostics for long double in device code (intel#1512) [SYCL] Add a mutex to state-modifying program functions (intel#1204) [SYCL][Test] Add Devicelib tests (intel#1256) [SYCL] Refactor semantic checks for variable types (intel#1513)
2 parents e93a28e + 99fa86f commit 7a24da3

File tree

68 files changed

+3048
-739
lines changed

Some content is hidden

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

68 files changed

+3048
-739
lines changed

.github/CODEOWNERS

+65-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,71 @@ opencl-aot/ @dm-vodopyanov @AlexeySachkov @romanovvlad
1010

1111
libdevice/ @asavonic @vzakhari
1212

13-
sycl/ @romanovvlad @bader
13+
sycl/ @intel/llvm-reviewers-runtime
14+
15+
sycl/ReleaseNotes.md @pvchupin
16+
17+
# USM
18+
sycl/include/CL/sycl/detail/clusm.hpp @jbrodman
19+
sycl/include/CL/sycl/detail/usm_impl.hpp @jbrodman
20+
sycl/include/CL/sycl/usm/ @jbrodman
21+
sycl/include/CL/sycl/ordered_queue.hpp @jbrodman
22+
sycl/include/CL/sycl/usm.hpp @jbrodman
23+
sycl/include/CL/cl_usm_ext.h @jbrodman
24+
sycl/source/detail/usm/ @jbrodman
25+
sycl/source/ordered_queue.cpp @jbrodman
26+
27+
# Sub-groups
28+
sycl/include/CL/sycl/detail/spirv.hpp @Pennycook @AlexeySachkov
29+
sycl/include/CL/sycl/intel/group_algorithm.hpp @Pennycook @AlexeySachkov
30+
sycl/include/CL/sycl/intel/sub_group.hpp @Pennycook @AlexeySachkov
31+
sycl/include/CL/sycl/intel/sub_group_host.hpp @Pennycook @AlexeySachkov
32+
33+
# PI API
34+
sycl/include/CL/sycl/detail/pi.def @smaslov-intel
35+
sycl/include/CL/sycl/detail/pi.h @smaslov-intel
36+
sycl/include/CL/sycl/detail/pi.hpp @smaslov-intel
37+
sycl/include/CL/sycl/detail/pi* @smaslov-intel
38+
sycl/plugins/ @smaslov-intel
39+
sycl/source/detail/pi.cpp @smaslov-intel
40+
sycl/source/detail/plugin.hpp @smaslov-intel
41+
sycl/source/detail/posix_pi.cpp @smaslov-intel
42+
sycl/source/detail/windows_pi.cpp @smaslov-intel
43+
44+
# Stream
45+
sycl/include/CL/sycl/detail/stream_impl.hpp @againull
46+
sycl/include/CL/sycl/stream.hpp @againull
47+
sycl/source/detail/stream_impl.cpp @againull
48+
sycl/source/stream.cpp @againull
49+
50+
# Specialization constant
51+
sycl/include/CL/sycl/detail/sycl_fe_intrins.hpp @kbobrovs
52+
sycl/include/CL/sycl/detail/spec_constant_impl.hpp @kbobrovs
53+
sycl/include/CL/sycl/experimental/spec_constant.hpp @kbobrovs
54+
55+
# Program manager
56+
sycl/source/detail/program_manager @kbobrovs
57+
sycl/source/detail/spec_constant_impl.cpp @kbobrovs
58+
59+
# FPGA extensions
60+
sycl/include/CL/sycl/intel/fpga_device_selector.hpp @MrSidims
61+
sycl/include/CL/sycl/intel/fpga_extensions.hpp @MrSidims
62+
sycl/include/CL/sycl/intel/fpga_reg.hpp @MrSidims
63+
sycl/include/CL/sycl/intel/pipes.hpp @MrSidims
64+
sycl/include/CL/sycl/pipes.hpp @MrSidims
65+
66+
# Function pointers
67+
sycl/include/CL/sycl/intel/function_pointer.hpp @AlexeySachkov
68+
sycl/source/function_pointer.cpp @AlexeySachkov
69+
70+
# Half Type
71+
sycl/include/CL/sycl/half_type.hpp @AlexeySachkov
72+
sycl/source/half_type.cpp @AlexeySachkov
73+
74+
# vec and swizzles
75+
sycl/include/CL/sycl/swizzles.def @turinevgeny
76+
sycl/include/CL/sycl/types.hpp @turinevgeny
77+
1478

1579
sycl/doc/ @pvchupin @kbobrovs
1680

clang/include/clang/Driver/Driver.h

+5
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/include/clang/Driver/Options.td

+2-2
Original file line numberDiff line numberDiff line change
@@ -502,8 +502,8 @@ def Xsycl_linker : Separate<["-"], "Xsycl-target-linker">,
502502
def Xsycl_linker_EQ : JoinedAndSeparate<["-"], "Xsycl-target-linker=">,
503503
HelpText<"Pass <arg> to the SYCL based target linker identified by <triple>.">,
504504
MetaVarName<"<triple> <arg>">, Flags<[CoreOption]>;
505-
def Xs : Joined<["-"], "Xs">, HelpText<"Pass <arg> to the offline compiler.">, MetaVarName<"<arg">, Flags<[CoreOption]>;
506-
def Xs_separate : Separate<["-"], "Xs">, HelpText<"Pass <arg> to the offline compiler.">, MetaVarName<"<arg">, Flags<[CoreOption]>;
505+
def Xs : Joined<["-"], "Xs">, HelpText<"Pass <arg> to the offline compiler, adding the option specifier '-' to the <arg>.">, MetaVarName<"<arg>">, Flags<[CoreOption]>;
506+
def Xs_separate : Separate<["-"], "Xs">, HelpText<"Pass <arg> to the offline compiler.">, MetaVarName<"<arg>">, Flags<[CoreOption]>;
507507
def z : Separate<["-"], "z">, Flags<[LinkerInput, RenderAsInput]>,
508508
HelpText<"Pass -z <arg> to the linker">, MetaVarName<"<arg>">,
509509
Group<Link_Group>;

clang/lib/Driver/Driver.cpp

+43-14
Original file line numberDiff line numberDiff line change
@@ -6071,21 +6071,38 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA,
60716071
NamedOutput = C.getArgs().MakeArgString(TempPath.c_str());
60726072
}
60736073

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

@@ -6215,6 +6232,18 @@ std::string Driver::GetTemporaryPath(StringRef Prefix, StringRef Suffix) const {
62156232
return std::string(Path.str());
62166233
}
62176234

6235+
std::string Driver::GetUniquePath(StringRef BaseName, StringRef Ext) const {
6236+
SmallString<128> Path;
6237+
std::error_code EC = llvm::sys::fs::createUniqueFile(
6238+
Twine(BaseName) + Twine("-%%%%%%.") + Ext, Path);
6239+
if (EC) {
6240+
Diag(clang::diag::err_unable_to_make_temp) << EC.message();
6241+
return "";
6242+
}
6243+
6244+
return std::string(Path.str());
6245+
}
6246+
62186247
std::string Driver::GetTemporaryDirectory(StringRef Prefix) const {
62196248
SmallString<128> Path;
62206249
std::error_code EC = llvm::sys::fs::createUniqueDirectory(Prefix, Path);

clang/lib/Sema/SemaSYCL.cpp

+6-99
Original file line numberDiff line numberDiff line change
@@ -236,13 +236,18 @@ static void checkSYCLVarType(Sema &S, QualType Ty, SourceRange Loc,
236236
emitDeferredDiagnosticAndNote(S, Loc, diag::err_typecheck_zero_array_size,
237237
UsedAtLoc);
238238

239+
// variable length arrays
240+
if (Ty->isVariableArrayType())
241+
emitDeferredDiagnosticAndNote(S, Loc, diag::err_vla_unsupported, UsedAtLoc);
242+
239243
// Sub-reference array or pointer, then proceed with that type.
240244
while (Ty->isAnyPointerType() || Ty->isArrayType())
241245
Ty = QualType{Ty->getPointeeOrArrayElementType(), 0};
242246

243-
// __int128, __int128_t, __uint128_t, __float128
247+
// __int128, __int128_t, __uint128_t, long double, __float128
244248
if (Ty->isSpecificBuiltinType(BuiltinType::Int128) ||
245249
Ty->isSpecificBuiltinType(BuiltinType::UInt128) ||
250+
Ty->isSpecificBuiltinType(BuiltinType::LongDouble) ||
246251
(Ty->isSpecificBuiltinType(BuiltinType::Float128) &&
247252
!S.Context.getTargetInfo().hasFloat128Type()))
248253
emitDeferredDiagnosticAndNote(S, Loc, diag::err_type_unsupported, UsedAtLoc)
@@ -284,9 +289,6 @@ class MarkDeviceFunction : public RecursiveASTVisitor<MarkDeviceFunction> {
284289
: RecursiveASTVisitor<MarkDeviceFunction>(), SemaRef(S) {}
285290

286291
bool VisitCallExpr(CallExpr *e) {
287-
for (const auto &Arg : e->arguments())
288-
CheckSYCLType(Arg->getType(), Arg->getSourceRange());
289-
290292
if (FunctionDecl *Callee = e->getDirectCallee()) {
291293
Callee = Callee->getCanonicalDecl();
292294
assert(Callee && "Device function canonical decl must be available");
@@ -308,8 +310,6 @@ class MarkDeviceFunction : public RecursiveASTVisitor<MarkDeviceFunction> {
308310
SemaRef.Diag(e->getExprLoc(), diag::err_sycl_restrict)
309311
<< Sema::KernelCallVirtualFunction;
310312

311-
CheckSYCLType(Callee->getReturnType(), Callee->getSourceRange());
312-
313313
if (auto const *FD = dyn_cast<FunctionDecl>(Callee)) {
314314
// FIXME: We need check all target specified attributes for error if
315315
// that function with attribute can not be called from sycl kernel. The
@@ -338,12 +338,6 @@ class MarkDeviceFunction : public RecursiveASTVisitor<MarkDeviceFunction> {
338338
return true;
339339
}
340340

341-
bool VisitCXXConstructExpr(CXXConstructExpr *E) {
342-
for (const auto &Arg : E->arguments())
343-
CheckSYCLType(Arg->getType(), Arg->getSourceRange());
344-
return true;
345-
}
346-
347341
bool VisitCXXTypeidExpr(CXXTypeidExpr *E) {
348342
SemaRef.Diag(E->getExprLoc(), diag::err_sycl_restrict) << Sema::KernelRTTI;
349343
return true;
@@ -354,35 +348,6 @@ class MarkDeviceFunction : public RecursiveASTVisitor<MarkDeviceFunction> {
354348
return true;
355349
}
356350

357-
bool VisitTypedefNameDecl(TypedefNameDecl *TD) {
358-
CheckSYCLType(TD->getUnderlyingType(), TD->getLocation());
359-
return true;
360-
}
361-
362-
bool VisitRecordDecl(RecordDecl *RD) {
363-
CheckSYCLType(QualType{RD->getTypeForDecl(), 0}, RD->getLocation());
364-
return true;
365-
}
366-
367-
bool VisitParmVarDecl(VarDecl *VD) {
368-
CheckSYCLType(VD->getType(), VD->getLocation());
369-
return true;
370-
}
371-
372-
bool VisitVarDecl(VarDecl *VD) {
373-
CheckSYCLType(VD->getType(), VD->getLocation());
374-
return true;
375-
}
376-
377-
bool VisitDeclRefExpr(DeclRefExpr *E) {
378-
Decl *D = E->getDecl();
379-
if (SemaRef.isKnownGoodSYCLDecl(D))
380-
return true;
381-
382-
CheckSYCLType(E->getType(), E->getSourceRange());
383-
return true;
384-
}
385-
386351
// The call graph for this translation unit.
387352
CallGraph SYCLCG;
388353
// The set of functions called by a kernel function.
@@ -506,64 +471,6 @@ class MarkDeviceFunction : public RecursiveASTVisitor<MarkDeviceFunction> {
506471
}
507472

508473
private:
509-
bool CheckSYCLType(QualType Ty, SourceRange Loc) {
510-
llvm::DenseSet<QualType> visited;
511-
return CheckSYCLType(Ty, Loc, visited);
512-
}
513-
514-
bool CheckSYCLType(QualType Ty, SourceRange Loc,
515-
llvm::DenseSet<QualType> &Visited) {
516-
if (Ty->isVariableArrayType()) {
517-
SemaRef.Diag(Loc.getBegin(), diag::err_vla_unsupported);
518-
return false;
519-
}
520-
521-
while (Ty->isAnyPointerType() || Ty->isArrayType())
522-
Ty = QualType{Ty->getPointeeOrArrayElementType(), 0};
523-
524-
// Pointers complicate recursion. Add this type to Visited.
525-
// If already there, bail out.
526-
if (!Visited.insert(Ty).second)
527-
return true;
528-
529-
if (const auto *ATy = dyn_cast<AttributedType>(Ty))
530-
return CheckSYCLType(ATy->getModifiedType(), Loc, Visited);
531-
532-
if (const auto *CRD = Ty->getAsCXXRecordDecl()) {
533-
// If the class is a forward declaration - skip it, because otherwise we
534-
// would query property of class with no definition, which results in
535-
// clang crash.
536-
if (!CRD->hasDefinition())
537-
return true;
538-
539-
for (const auto &Field : CRD->fields()) {
540-
if (!CheckSYCLType(Field->getType(), Field->getSourceRange(),
541-
Visited)) {
542-
if (SemaRef.getLangOpts().SYCLIsDevice)
543-
SemaRef.Diag(Loc.getBegin(), diag::note_sycl_used_here);
544-
return false;
545-
}
546-
}
547-
} else if (const auto *RD = Ty->getAsRecordDecl()) {
548-
for (const auto &Field : RD->fields()) {
549-
if (!CheckSYCLType(Field->getType(), Field->getSourceRange(),
550-
Visited)) {
551-
if (SemaRef.getLangOpts().SYCLIsDevice)
552-
SemaRef.Diag(Loc.getBegin(), diag::note_sycl_used_here);
553-
return false;
554-
}
555-
}
556-
} else if (const auto *FPTy = dyn_cast<FunctionProtoType>(Ty)) {
557-
for (const auto &ParamTy : FPTy->param_types())
558-
if (!CheckSYCLType(ParamTy, Loc, Visited))
559-
return false;
560-
return CheckSYCLType(FPTy->getReturnType(), Loc, Visited);
561-
} else if (const auto *FTy = dyn_cast<FunctionType>(Ty)) {
562-
return CheckSYCLType(FTy->getReturnType(), Loc, Visited);
563-
}
564-
return true;
565-
}
566-
567474
Sema &SemaRef;
568475
};
569476

clang/test/Driver/sycl-offload.c

+11-8
Original file line numberDiff line numberDiff line change
@@ -749,22 +749,25 @@
749749
// RUN: %clang -fsycl -target x86_64-unknown-linux-gnu -save-temps %s -### 2>&1
750750
// RUN: %clang -fsycl -fsycl-targets=spir64-unknown-unknown-sycldevice -target x86_64-unknown-linux-gnu -save-temps %s -### 2>&1
751751
// RUN: %clangxx -fsycl -fsycl-targets=spir64-unknown-unknown-sycldevice -target x86_64-unknown-linux-gnu -save-temps %s -### 2>&1 \
752-
// RUN: | FileCheck %s --check-prefix=CHK-FSYCL-SAVE-TEMPS
752+
// RUN: | FileCheck %s --check-prefixes=CHK-FSYCL-SAVE-TEMPS,CHK-FSYCL-SAVE-TEMPS-CONFL
753753
// CHK-FSYCL-SAVE-TEMPS: clang{{.*}} "-fsycl-is-device"{{.*}} "-o" "[[DEVICE_BASE_NAME:[a-z0-9-]+]].ii"
754754
// CHK-FSYCL-SAVE-TEMPS: clang{{.*}} "-fsycl-is-device"{{.*}} "-o" "[[DEVICE_BASE_NAME]].bc"{{.*}} "[[DEVICE_BASE_NAME]].ii"
755-
// CHK-FSYCL-SAVE-TEMPS: llvm-link{{.*}} "[[DEVICE_BASE_NAME]].bc"{{.*}} "-o" "[[DEVICE_BASE_NAME]].bc"
756-
// CHK-FSYCL-SAVE-TEMPS: sycl-post-link{{.*}} "-o" "[[DEVICE_BASE_NAME]].table" "[[DEVICE_BASE_NAME]].bc"
755+
// CHK-FSYCL-SAVE-TEMPS: llvm-link{{.*}} "[[DEVICE_BASE_NAME]].bc"{{.*}} "-o" "[[LINKED_DEVICE_BC:.*\.bc]]"
756+
// CHK-FSYCL-SAVE-TEMPS-CONFL-NOT: "[[DEVICE_BASE_NAME]].bc"{{.*}} "[[DEVICE_BASE_NAME]].bc"
757+
// CHK-FSYCL-SAVE-TEMPS: sycl-post-link{{.*}} "-o" "[[DEVICE_BASE_NAME]].table" "[[LINKED_DEVICE_BC]]"
757758
// CHK-FSYCL-SAVE-TEMPS: file-table-tform{{.*}} "-o" "[[DEVICE_BASE_NAME]].txt" "[[DEVICE_BASE_NAME]].table"
758-
// CHK-FSYCL-SAVE-TEMPS: llvm-foreach{{.*}} "-o" "[[DEVICE_BASE_NAME]].txt" {{.*}} "[[DEVICE_BASE_NAME]].txt"
759-
// CHK-FSYCL-SAVE-TEMPS: file-table-tform{{.*}} "-o" "[[DEVICE_BASE_NAME]].table" "[[DEVICE_BASE_NAME]].table" "[[DEVICE_BASE_NAME]].txt"
760-
// CHK-FSYCL-SAVE-TEMPS: clang-offload-wrapper{{.*}} "-o=[[TEMPFILE:[a-z0-9_/-]+]].bc"{{.*}} "-batch" "[[DEVICE_BASE_NAME]].table"
761-
// CHK-FSYCL-SAVE-TEMPS: llc{{.*}} "-o" "[[DEVICE_OBJ_NAME:[a-z0-9\-]+]].o"{{.*}} "[[TEMPFILE]].bc"
759+
// CHK-FSYCL-SAVE-TEMPS: llvm-foreach{{.*}}llvm-spirv{{.*}} "-o" "[[SPIRV_FILE_LIST:.*\.txt]]" {{.*}}"[[DEVICE_BASE_NAME]].txt"
760+
// CHK-FSYCL-SAVE-TEMPS-CONFL-NOT: "-o" "[[DEVICE_BASE_NAME]].txt" {{.*}}"[[DEVICE_BASE_NAME]].txt"
761+
// CHK-FSYCL-SAVE-TEMPS: file-table-tform{{.*}} "-o" "[[PRE_WRAPPER_TABLE:.*\.table]]" "[[DEVICE_BASE_NAME]].table" "[[SPIRV_FILE_LIST]]"
762+
// CHK-FSYCL-SAVE-TEMPS-CONFL-NOT: "-o" "[[DEVICE_BASE_NAME]].table"{{.*}} "[[DEVICE_BASE_NAME]].table"
763+
// CHK-FSYCL-SAVE-TEMPS: clang-offload-wrapper{{.*}} "-o=[[WRAPPER_TEMPFILE_NAME:[a-z0-9_/-]+]].bc"{{.*}} "-batch" "[[PRE_WRAPPER_TABLE]]"
764+
// CHK-FSYCL-SAVE-TEMPS: llc{{.*}} "-o" "[[DEVICE_OBJ_NAME:.*\.o]]"{{.*}} "[[WRAPPER_TEMPFILE_NAME]].bc"
762765
// CHK-FSYCL-SAVE-TEMPS: clang{{.*}} "-fsycl-is-device"{{.*}} "-fsycl-int-header=[[DEVICE_BASE_NAME]].h"{{.*}} "[[DEVICE_BASE_NAME]].ii"
763766
// CHK-FSYCL-SAVE-TEMPS: clang{{.*}} "-include" "[[DEVICE_BASE_NAME]].h"{{.*}} "-fsycl-is-host"{{.*}} "-o" "[[HOST_BASE_NAME:[a-z0-9_-]+]].ii"
764767
// CHK-FSYCL-SAVE-TEMPS: clang{{.*}} "-o" "[[HOST_BASE_NAME:.*]].bc"{{.*}} "[[HOST_BASE_NAME]].ii"
765768
// CHK-FSYCL-SAVE-TEMPS: clang{{.*}} "-o" "[[HOST_BASE_NAME:.*]].s"{{.*}} "[[HOST_BASE_NAME]].bc"
766769
// CHK-FSYCL-SAVE-TEMPS: clang{{.*}} "-o" "[[HOST_BASE_NAME:.*]].o"{{.*}} "[[HOST_BASE_NAME]].s"
767-
// CHK-FSYCL-SAVE-TEMPS: ld{{.*}} "[[HOST_BASE_NAME]].o"{{.*}} "[[DEVICE_OBJ_NAME]].o"
770+
// CHK-FSYCL-SAVE-TEMPS: ld{{.*}} "[[HOST_BASE_NAME]].o"{{.*}} "[[DEVICE_OBJ_NAME]]"
768771

769772
/// -fsycl with /Fo testing
770773
// RUN: %clang_cl -fsycl /Fosomefile.obj -c %s -### 2>&1 \

0 commit comments

Comments
 (0)