Skip to content

Commit 63f3e6d

Browse files
committed
Merge remote-tracking branch 'intel_llvm/sycl' into llvmspirv_pulldown
2 parents 37d7a0e + 0aac708 commit 63f3e6d

File tree

315 files changed

+1258
-202
lines changed

Some content is hidden

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

315 files changed

+1258
-202
lines changed

buildbot/dependency.conf

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,33 @@
11
[VERSIONS]
2-
# https://github.com/intel/llvm/releases/download/2020-WW41/oclcpuexp-2020.11.10.0.05_rel.tar.gz
3-
ocl_cpu_rt_ver=2020.11.10.0.05
4-
# https://github.com/intel/llvm/releases/download/2020-WW41/win-oclcpuexp-2020.11.10.0.05_rel.zip
5-
ocl_cpu_rt_ver_win=2020.11.10.0.05
2+
# https://github.com/intel/llvm/releases/download/2020-WW45/oclcpuexp-2020.11.11.0.04_rel.tar.gz
3+
ocl_cpu_rt_ver=2020.11.11.0.04
4+
# https://github.com/intel/llvm/releases/download/2020-WW45/win-oclcpuexp-2020.11.11.0.04_rel.zip
5+
ocl_cpu_rt_ver_win=2020.11.11.0.04
66
# Same GPU driver supports Level Zero and OpenCL:
7-
# https://github.com/intel/compute-runtime/releases/tag/20.42.18209
8-
ocl_gpu_rt_ver=20.42.18209
7+
# https://github.com/intel/compute-runtime/releases/tag/20.44.18297
8+
ocl_gpu_rt_ver=20.44.18297
99
# Same GPU driver supports Level Zero and OpenCL:
10-
# https://downloadmirror.intel.com/29879/a08/igfx_win10_100.8778.zip
11-
ocl_gpu_rt_ver_win=27.20.100.8778
10+
# https://downloadmirror.intel.com/29988/a08/igfx_win10_100.8935.zip
11+
ocl_gpu_rt_ver_win=27.20.100.8935
1212
intel_sycl_ver=build
13-
# https://github.com/oneapi-src/oneTBB/releases/download/v2021.1-beta08/oneapi-tbb-2021.1-beta08-lin.tgz
14-
tbb_ver=2021.1.10.2267
15-
# https://github.com/oneapi-src/oneTBB/releases/download/v2021.1-beta08/oneapi-tbb-2021.1-beta08-win.zip
16-
tbb_ver_win=2021.1.10.2267
17-
# https://github.com/intel/llvm/releases/download/2020-WW41/fpgaemu-2020.11.10.0.05_rel.tar.gz
18-
ocl_fpga_emu_ver=2020.11.10.0.05
19-
# https://github.com/intel/llvm/releases/download/2020-WW41/win-fpgaemu-2020.11.10.0.05_rel.zip
20-
ocl_fpga_emu_ver_win=2020.11.10.0.05
21-
fpga_ver=20200913_000017
22-
fpga_ver_win=20200913_000017
13+
# https://github.com/oneapi-src/oneTBB/releases/download/v2021.1-beta10/oneapi-tbb-2021.1-beta10-lin.tgz
14+
tbb_ver=2021.1.053
15+
# https://github.com/oneapi-src/oneTBB/releases/download/v2021.1-beta10/oneapi-tbb-2021.1-beta10-win.zip
16+
tbb_ver_win=2021.1.049
17+
# https://github.com/intel/llvm/releases/download/2020-WW45/fpgaemu-2020.11.11.0.04_rel.tar.gz
18+
ocl_fpga_emu_ver=2020.11.11.0.04
19+
# https://github.com/intel/llvm/releases/download/2020-WW45/win-fpgaemu-2020.11.11.0.04_rel.zip
20+
ocl_fpga_emu_ver_win=2020.11.11.0.04
21+
fpga_ver=20201021_000005
22+
fpga_ver_win=20201022_000005
2323

2424
[DRIVER VERSIONS]
25-
cpu_driver_lin=2020.11.10.0.05
26-
cpu_driver_win=2020.11.10.0.05
27-
gpu_driver_lin=20.42.18209
28-
gpu_driver_win=27.20.100.8778
29-
fpga_driver_lin=2020.11.10.0.05
30-
fpga_driver_win=2020.11.10.0.05
25+
cpu_driver_lin=2020.11.11.0.04
26+
cpu_driver_win=2020.11.11.0.04
27+
gpu_driver_lin=20.44.18297
28+
gpu_driver_win=27.20.100.8935
29+
fpga_driver_lin=2020.11.11.0.04
30+
fpga_driver_win=2020.11.11.0.04
3131
# NVidia CUDA driver
3232
# TODO provide URL for CUDA driver
3333
nvidia_gpu_driver_lin=435.21

clang/include/clang/Basic/Attr.td

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1226,6 +1226,19 @@ def SYCLIntelNumSimdWorkItems : InheritableAttr {
12261226
let PragmaAttributeSupport = 0;
12271227
}
12281228

1229+
def SYCLIntelStallEnable : InheritableAttr {
1230+
let Spellings = [CXX11<"intel","stall_enable">];
1231+
let LangOpts = [SYCLIsHost, SYCLIsDevice];
1232+
let Subjects = SubjectList<[Function], ErrorDiag>;
1233+
let AdditionalMembers = [{
1234+
static const char *getName() {
1235+
return "stall_enable";
1236+
}
1237+
}];
1238+
let Documentation = [SYCLIntelStallEnableAttrDocs];
1239+
let PragmaAttributeSupport = 0;
1240+
}
1241+
12291242
def SYCLIntelSchedulerTargetFmaxMhz : InheritableAttr {
12301243
let Spellings = [CXX11<"intelfpga","scheduler_target_fmax_mhz">,
12311244
CXX11<"intel","scheduler_target_fmax_mhz">];

clang/include/clang/Basic/AttrDocs.td

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2229,6 +2229,39 @@ device kernel, the attribute is ignored and it is not propagated to a kernel.
22292229
}];
22302230
}
22312231

2232+
def SYCLIntelStallEnableAttrDocs : Documentation {
2233+
let Category = DocCatFunction;
2234+
let Heading = "intel::stall_enable";
2235+
let Content = [{
2236+
When applied to a lambda or function call operator (of a function object)
2237+
on device, this requests, to the extent possible, that statically-scheduled
2238+
clusters handle stalls using a stall-enable signal to freeze computation
2239+
within the cluster. This attribute is ignored on the host.
2240+
2241+
If ``intel::stall_enable`` is applied to a function called from a device
2242+
kernel, the attribute is ignored and it is not propagated to a kernel.
2243+
2244+
The ``intel::stall_enable`` attribute takes no argument and has an effect
2245+
when applied to a function, and no effect otherwise.
2246+
2247+
.. code-block:: c++
2248+
2249+
class Functor
2250+
{
2251+
[[intel::stall_enable]] void operator()(item<1> item)
2252+
{
2253+
/* kernel code */
2254+
}
2255+
}
2256+
2257+
kernel<class kernel_name>(
2258+
[]() [[intel::stall_enable]] {
2259+
/* kernel code */
2260+
});
2261+
2262+
}];
2263+
}
2264+
22322265
def ReqdWorkGroupSizeAttrDocs : Documentation {
22332266
let Category = DocCatFunction;
22342267
let Heading = "reqd_work_group_size";

clang/include/clang/Basic/AttributeCommonInfo.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,8 @@ class AttributeCommonInfo {
165165
ParsedAttr == AT_SYCLIntelSchedulerTargetFmaxMhz ||
166166
ParsedAttr == AT_SYCLIntelMaxWorkGroupSize ||
167167
ParsedAttr == AT_SYCLIntelMaxGlobalWorkDim ||
168-
ParsedAttr == AT_SYCLIntelNoGlobalWorkOffset)
168+
ParsedAttr == AT_SYCLIntelNoGlobalWorkOffset ||
169+
ParsedAttr == AT_SYCLIntelStallEnable)
169170
return true;
170171

171172
return false;

clang/include/clang/Basic/DiagnosticSemaKinds.td

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11085,12 +11085,14 @@ def err_ext_int_max_size : Error<"%select{signed|unsigned}0 _ExtInt of bit "
1108511085
def err_esimd_glob_cant_init : Error<
1108611086
"SYCL explicit SIMD does not permit private global variable to have an initializer">;
1108711087

11088-
def err_sycl_kernel_incorrectly_named : Error<
11089-
"kernel %select{name is missing"
11090-
"|needs to have a globally-visible name"
11091-
"|name is invalid. Unscoped enum requires fixed underlying type"
11092-
"|name cannot be a type in the \"std\" namespace"
11088+
def err_sycl_kernel_incorrectly_named : Error<"%0 is an invalid kernel name type">;
11089+
def note_invalid_type_in_sycl_kernel : Note<
11090+
"%select{%1 should be globally-visible"
11091+
"|unscoped enum %1 requires fixed underlying type"
11092+
"|type %1 cannot be in the \"std\" namespace"
11093+
"|unnamed type used in a SYCL kernel name"
1109311094
"}0">;
11095+
1109411096
def err_sycl_kernel_not_function_object
1109511097
: Error<"kernel parameter must be a lambda or function object">;
1109611098
def err_sycl_restrict : Error<

clang/include/clang/Driver/Options.td

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1937,7 +1937,9 @@ def fsycl_link : Flag<["-"], "fsycl-link">, Alias<fsycl_link_EQ>,
19371937
def fsycl_unnamed_lambda : Flag<["-"], "fsycl-unnamed-lambda">,
19381938
Flags<[CC1Option, CoreOption]>, HelpText<"Allow unnamed SYCL lambda kernels">;
19391939
def fsycl_help_EQ : Joined<["-"], "fsycl-help=">,
1940-
Flags<[NoXarchOption, CoreOption]>, HelpText<"Emit help information from the related offline compilation tool">, Values<"all,fpga,gen,x86_64">;
1940+
Flags<[NoXarchOption, CoreOption]>, HelpText<"Emit help information from the "
1941+
"related offline compilation tool. Valid values: all, fpga, gen, x86_64.">,
1942+
Values<"all,fpga,gen,x86_64">;
19411943
def fsycl_help : Flag<["-"], "fsycl-help">, Alias<fsycl_help_EQ>,
19421944
Flags<[NoXarchOption, CoreOption]>, AliasArgs<["all"]>, HelpText<"Emit help information "
19431945
"from all of the offline compilation tools">;

clang/lib/CodeGen/CodeGenFunction.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -676,6 +676,12 @@ void CodeGenFunction::EmitOpenCLKernelMetadata(const FunctionDecl *FD,
676676
if (A->getEnabled())
677677
Fn->setMetadata("no_global_work_offset", llvm::MDNode::get(Context, {}));
678678
}
679+
680+
if (FD->hasAttr<SYCLIntelStallEnableAttr>()) {
681+
llvm::Metadata *AttrMDArgs[] = {
682+
llvm::ConstantAsMetadata::get(Builder.getInt32(1))};
683+
Fn->setMetadata("stall_enable", llvm::MDNode::get(Context, AttrMDArgs));
684+
}
679685
}
680686

681687
/// Determine whether the function F ends with a return stmt.

clang/lib/Driver/ToolChains/Clang.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4906,7 +4906,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
49064906
}
49074907

49084908
if (Arg *A = Args.getLastArg(options::OPT_LongDouble_Group)) {
4909-
if (TC.getTriple().isX86())
4909+
if (TC.getTriple().isX86() || TC.getTriple().isSPIR())
49104910
A->render(Args, CmdArgs);
49114911
else if ((TC.getArch() == llvm::Triple::ppc || TC.getTriple().isPPC64()) &&
49124912
(A->getOption().getID() != options::OPT_mlong_double_80))

clang/lib/Sema/SemaDeclAttr.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3029,6 +3029,20 @@ static void handleNumSimdWorkItemsAttr(Sema &S, Decl *D,
30293029
E);
30303030
}
30313031

3032+
// Handles stall_enable
3033+
static void handleStallEnableAttr(Sema &S, Decl *D, const ParsedAttr &Attr) {
3034+
if (D->isInvalidDecl())
3035+
return;
3036+
3037+
unsigned NumArgs = Attr.getNumArgs();
3038+
if (NumArgs > 0) {
3039+
S.Diag(Attr.getLoc(), diag::warn_attribute_too_many_arguments) << Attr << 0;
3040+
return;
3041+
}
3042+
3043+
handleSimpleAttribute<SYCLIntelStallEnableAttr>(S, D, Attr);
3044+
}
3045+
30323046
// Add scheduler_target_fmax_mhz
30333047
void Sema::addSYCLIntelSchedulerTargetFmaxMhzAttr(
30343048
Decl *D, const AttributeCommonInfo &Attr, Expr *E) {
@@ -8401,6 +8415,9 @@ static void ProcessDeclAttribute(Sema &S, Scope *scope, Decl *D,
84018415
case ParsedAttr::AT_SYCLIntelNoGlobalWorkOffset:
84028416
handleNoGlobalWorkOffsetAttr(S, D, AL);
84038417
break;
8418+
case ParsedAttr::AT_SYCLIntelStallEnable:
8419+
handleStallEnableAttr(S, D, AL);
8420+
break;
84048421
case ParsedAttr::AT_VecTypeHint:
84058422
handleVecTypeHint(S, D, AL);
84068423
break;

clang/lib/Sema/SemaSYCL.cpp

Lines changed: 46 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -545,6 +545,20 @@ class MarkDeviceFunction : public RecursiveASTVisitor<MarkDeviceFunction> {
545545

546546
if (auto *A = FD->getAttr<SYCLSimdAttr>())
547547
Attrs.insert(A);
548+
549+
// Allow the kernel attribute "stall_enable" only on lambda functions
550+
// and function objects that are called directly from a kernel
551+
// (i.e. the one passed to the single_task or parallel_for functions).
552+
// For all other cases, emit a warning and ignore.
553+
if (auto *A = FD->getAttr<SYCLIntelStallEnableAttr>()) {
554+
if (ParentFD == SYCLKernel) {
555+
Attrs.insert(A);
556+
} else {
557+
SemaRef.Diag(A->getLocation(), diag::warn_attribute_ignored) << A;
558+
FD->dropAttr<SYCLIntelStallEnableAttr>();
559+
}
560+
}
561+
548562
// Propagate the explicit SIMD attribute through call graph - it is used
549563
// to distinguish ESIMD code in ESIMD LLVM passes.
550564
if (KernelBody && KernelBody->hasAttr<SYCLSimdAttr>() &&
@@ -2833,6 +2847,7 @@ class SYCLKernelNameTypeVisitor
28332847
public ConstTemplateArgumentVisitor<SYCLKernelNameTypeVisitor> {
28342848
Sema &S;
28352849
SourceLocation KernelInvocationFuncLoc;
2850+
QualType KernelNameType;
28362851
using InnerTypeVisitor = TypeVisitor<SYCLKernelNameTypeVisitor>;
28372852
using InnerTemplArgVisitor =
28382853
ConstTemplateArgumentVisitor<SYCLKernelNameTypeVisitor>;
@@ -2844,8 +2859,10 @@ class SYCLKernelNameTypeVisitor
28442859
}
28452860

28462861
public:
2847-
SYCLKernelNameTypeVisitor(Sema &S, SourceLocation KernelInvocationFuncLoc)
2848-
: S(S), KernelInvocationFuncLoc(KernelInvocationFuncLoc) {}
2862+
SYCLKernelNameTypeVisitor(Sema &S, SourceLocation KernelInvocationFuncLoc,
2863+
QualType KernelNameType)
2864+
: S(S), KernelInvocationFuncLoc(KernelInvocationFuncLoc),
2865+
KernelNameType(KernelNameType) {}
28492866

28502867
bool isValid() { return !IsInvalid; }
28512868

@@ -2856,7 +2873,9 @@ class SYCLKernelNameTypeVisitor
28562873
if (!RD) {
28572874
if (T->isNullPtrType()) {
28582875
S.Diag(KernelInvocationFuncLoc, diag::err_sycl_kernel_incorrectly_named)
2859-
<< /* kernel name cannot be a type in the std namespace */ 3;
2876+
<< KernelNameType;
2877+
S.Diag(KernelInvocationFuncLoc, diag::note_invalid_type_in_sycl_kernel)
2878+
<< /* kernel name cannot be a type in the std namespace */ 2 << T;
28602879
IsInvalid = true;
28612880
}
28622881
return;
@@ -2881,9 +2900,10 @@ class SYCLKernelNameTypeVisitor
28812900
const EnumDecl *ED = T->getDecl();
28822901
if (!ED->isScoped() && !ED->isFixed()) {
28832902
S.Diag(KernelInvocationFuncLoc, diag::err_sycl_kernel_incorrectly_named)
2884-
<< /* Unscoped enum requires fixed underlying type */ 2;
2885-
S.Diag(ED->getSourceRange().getBegin(), diag::note_entity_declared_at)
2886-
<< ED;
2903+
<< KernelNameType;
2904+
S.Diag(KernelInvocationFuncLoc, diag::note_invalid_type_in_sycl_kernel)
2905+
<< /* Unscoped enum requires fixed underlying type */ 1
2906+
<< QualType(ED->getTypeForDecl(), 0);
28872907
IsInvalid = true;
28882908
}
28892909
}
@@ -2900,7 +2920,10 @@ class SYCLKernelNameTypeVisitor
29002920
auto *NameSpace = dyn_cast_or_null<NamespaceDecl>(DeclCtx);
29012921
if (NameSpace && NameSpace->isStdNamespace()) {
29022922
S.Diag(KernelInvocationFuncLoc, diag::err_sycl_kernel_incorrectly_named)
2903-
<< /* kernel name cannot be a type in the std namespace */ 3;
2923+
<< KernelNameType;
2924+
S.Diag(KernelInvocationFuncLoc, diag::note_invalid_type_in_sycl_kernel)
2925+
<< /* kernel name cannot be a type in the std namespace */ 2
2926+
<< QualType(Tag->getTypeForDecl(), 0);
29042927
IsInvalid = true;
29052928
return;
29062929
}
@@ -2909,19 +2932,27 @@ class SYCLKernelNameTypeVisitor
29092932
if (KernelNameIsMissing) {
29102933
S.Diag(KernelInvocationFuncLoc,
29112934
diag::err_sycl_kernel_incorrectly_named)
2912-
<< /* kernel name is missing */ 0;
2935+
<< KernelNameType;
2936+
S.Diag(KernelInvocationFuncLoc,
2937+
diag::note_invalid_type_in_sycl_kernel)
2938+
<< /* unnamed type used in a SYCL kernel name */ 3;
29132939
IsInvalid = true;
29142940
return;
29152941
}
29162942
if (Tag->isCompleteDefinition()) {
29172943
S.Diag(KernelInvocationFuncLoc,
29182944
diag::err_sycl_kernel_incorrectly_named)
2919-
<< /* kernel name is not globally-visible */ 1;
2945+
<< KernelNameType;
2946+
S.Diag(KernelInvocationFuncLoc,
2947+
diag::note_invalid_type_in_sycl_kernel)
2948+
<< /* kernel name is not globally-visible */ 0
2949+
<< QualType(Tag->getTypeForDecl(), 0);
29202950
IsInvalid = true;
2921-
} else
2951+
} else {
29222952
S.Diag(KernelInvocationFuncLoc, diag::warn_sycl_implicit_decl);
2923-
S.Diag(Tag->getSourceRange().getBegin(), diag::note_previous_decl)
2924-
<< Tag->getName();
2953+
S.Diag(Tag->getSourceRange().getBegin(), diag::note_previous_decl)
2954+
<< Tag->getName();
2955+
}
29252956
}
29262957
}
29272958
}
@@ -2998,7 +3029,8 @@ void Sema::CheckSYCLKernelCall(FunctionDecl *KernelFunc, SourceRange CallLoc,
29983029
SyclKernelArgsSizeChecker ArgsSizeChecker(*this, Args[0]->getExprLoc());
29993030

30003031
KernelObjVisitor Visitor{*this};
3001-
SYCLKernelNameTypeVisitor KernelNameTypeVisitor(*this, Args[0]->getExprLoc());
3032+
SYCLKernelNameTypeVisitor KernelNameTypeVisitor(*this, Args[0]->getExprLoc(),
3033+
KernelNameType);
30023034

30033035
DiagnosingSYCLKernel = true;
30043036

@@ -3204,6 +3236,7 @@ void Sema::MarkDevice(void) {
32043236
case attr::Kind::SYCLIntelSchedulerTargetFmaxMhz:
32053237
case attr::Kind::SYCLIntelMaxGlobalWorkDim:
32063238
case attr::Kind::SYCLIntelNoGlobalWorkOffset:
3239+
case attr::Kind::SYCLIntelStallEnable:
32073240
case attr::Kind::SYCLSimd: {
32083241
if ((A->getKind() == attr::Kind::SYCLSimd) && KernelBody &&
32093242
!KernelBody->getAttr<SYCLSimdAttr>()) {
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// RUN: %clang_cc1 -fsycl -fsycl-is-device -internal-isystem %S/Inputs -triple spir64-unknown-unknown-sycldevice -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s
2+
3+
#include "sycl.hpp"
4+
5+
using namespace cl::sycl;
6+
queue q;
7+
8+
class Foo {
9+
public:
10+
[[intel::stall_enable]] void operator()() const {}
11+
};
12+
13+
int main() {
14+
q.submit([&](handler &h) {
15+
Foo f;
16+
h.single_task<class test_kernel1>(f);
17+
18+
h.single_task<class test_kernel2>(
19+
[]() [[intel::stall_enable]]{});
20+
});
21+
return 0;
22+
}
23+
24+
// CHECK: define spir_kernel void @"{{.*}}test_kernel1"() #0 {{.*}} !stall_enable ![[NUM5:[0-9]+]]
25+
// CHECK: define spir_kernel void @"{{.*}}test_kernel2"() #0 {{.*}} !stall_enable ![[NUM5]]
26+
// CHECK: ![[NUM5]] = !{i32 1}

clang/test/Driver/mlong-double-128.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// RUN: %clang -target powerpc64-pc-freebsd12 -c -### %s -mlong-double-128 2>&1 | FileCheck %s
33
// RUN: %clang -target powerpc64le-linux-musl -c -### %s -mlong-double-128 2>&1 | FileCheck %s
44
// RUN: %clang -target i686-linux-gnu -c -### %s -mlong-double-128 2>&1 | FileCheck %s
5+
// RUN: %clang -target spir64-unknown-unknown-sycldevice -c -### %s -mlong-double-128 2>&1 | FileCheck %s
56

67
// RUN: %clang -target x86_64-linux-musl -c -### %s -mlong-double-128 -mlong-double-80 2>&1 | FileCheck --implicit-check-not=-mlong-double-128 /dev/null
78
// RUN: %clang -target x86_64-linux-musl -c -### %s -mlong-double-80 -mlong-double-128 2>&1 | FileCheck %s

clang/test/Driver/mlong-double-64.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
// RUN: %clang -target powerpc64le-linux-musl -c -### %s -mlong-double-64 2>&1 | FileCheck %s
44
// RUN: %clang -target i686-linux-gnu -c -### %s -mlong-double-64 2>&1 | FileCheck %s
55
// RUN: %clang -target x86_64-linux-musl -c -### %s -mlong-double-64 2>&1 | FileCheck %s
6+
// RUN: %clang -target spir64-unknown-unknown-sycldevice -c -### %s -mlong-double-64 2>&1 | FileCheck %s
67

78
// CHECK: "-mlong-double-64"
89

0 commit comments

Comments
 (0)