Skip to content

Commit ca39fa6

Browse files
committed
Merge remote-tracking branch 'origin/sycl' into sub-group-tidy
Signed-off-by: John Pennycook <[email protected]>
2 parents 011139d + fe8d852 commit ca39fa6

31 files changed

+4865
-34
lines changed

clang/include/clang/Driver/Options.td

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1822,6 +1822,9 @@ def fstrict_vtable_pointers: Flag<["-"], "fstrict-vtable-pointers">,
18221822
def fstrict_overflow : Flag<["-"], "fstrict-overflow">, Group<f_Group>;
18231823
def fintelfpga : Flag<["-"], "fintelfpga">, Group<f_Group>,
18241824
Flags<[CC1Option, CoreOption]>, HelpText<"Perform ahead of time compilation for FPGA">;
1825+
def fsycl_enable_usm_address_spaces : Flag<["-"], "fsycl-enable-usm-address-spaces">,
1826+
Group<f_Group>, Flags<[CC1Option, CoreOption]>,
1827+
HelpText<"Enable SPV_INTEL_usm_storage_classes extension">;
18251828
def fsycl_device_only : Flag<["-"], "fsycl-device-only">, Flags<[CoreOption]>,
18261829
HelpText<"Compile SYCL kernels for device">;
18271830
def fsycl_targets_EQ : CommaJoined<["-"], "fsycl-targets=">, Flags<[DriverOption, CC1Option, CoreOption]>,

clang/lib/Driver/ToolChains/Clang.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7642,7 +7642,17 @@ void SPIRVTranslator::ConstructJob(Compilation &C, const JobAction &JA,
76427642
TranslatorArgs.push_back(Output.getFilename());
76437643
if (getToolChain().getTriple().isSYCLDeviceEnvironment()) {
76447644
TranslatorArgs.push_back("-spirv-max-version=1.1");
7645-
TranslatorArgs.push_back("-spirv-ext=+all");
7645+
std::string ExtArg("-spirv-ext=+all");
7646+
// Disable SPV_INTEL_usm_storage_classes by default since it adds new
7647+
// storage classes that represent global_device and global_host address
7648+
// spaces, which are not supported for all targets. With the extension
7649+
// disable the storage classes will be lowered to CrossWorkgroup storage
7650+
// class that is mapped to just global address space.
7651+
if (!(getToolChain().getTriple().getSubArch() ==
7652+
llvm::Triple::SPIRSubArch_fpga &&
7653+
TCArgs.hasArg(options::OPT_fsycl_enable_usm_address_spaces)))
7654+
ExtArg += ",-SPV_INTEL_usm_storage_classes";
7655+
TranslatorArgs.push_back(TCArgs.MakeArgString(ExtArg));
76467656
}
76477657
for (auto I : Inputs) {
76487658
std::string Filename(I.getFilename());

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
// CHK-FPGA-LINK-NOT: clang-offload-bundler{{.*}}
3333
// CHK-FPGA-LINK: llvm-link{{.*}} "[[OUTPUT1]]" "-o" "[[OUTPUT2_1:.+\.bc]]"
3434
// CHK-FPGA-LINK: sycl-post-link{{.*}} "-ir-output-only" "-spec-const=default" "-o" "[[OUTPUT2:.+\.bc]]" "[[OUTPUT2_1]]"
35-
// CHK-FPGA-LINK: llvm-spirv{{.*}} "-o" "[[OUTPUT3:.+\.spv]]" "-spirv-max-version=1.1" "-spirv-ext=+all" "[[OUTPUT2]]"
35+
// CHK-FPGA-LINK: llvm-spirv{{.*}} "-o" "[[OUTPUT3:.+\.spv]]" "-spirv-max-version=1.1" "-spirv-ext=+all,-SPV_INTEL_usm_storage_classes" "[[OUTPUT2]]"
3636
// CHK-FPGA-EARLY: aoc{{.*}} "-o" "[[OUTPUT4:.+\.aocr]]" "[[OUTPUT3]]" "-sycl" "-rtl"
3737
// CHK-FPGA-IMAGE: aoc{{.*}} "-o" "[[OUTPUT5:.+\.aocx]]" "[[OUTPUT3]]" "-sycl"
3838
// CHK-FPGA-LINK: llvm-ar{{.*}} "cr" "libfoo.a" "[[INPUT]]"
@@ -58,7 +58,7 @@
5858
// CHK-FPGA-LINK-WIN-NOT: clang-offload-bundler{{.*}}
5959
// CHK-FPGA-LINK-WIN: llvm-link{{.*}} "[[OUTPUT1]]" "-o" "[[OUTPUT2_1:.+\.bc]]"
6060
// CHK-FPGA-LINK-WIN: sycl-post-link{{.*}} "-ir-output-only" "-spec-const=default" "-o" "[[OUTPUT2:.+\.bc]]" "[[OUTPUT2_1]]"
61-
// CHK-FPGA-LINK-WIN: llvm-spirv{{.*}} "-o" "[[OUTPUT3:.+\.spv]]" "-spirv-max-version=1.1" "-spirv-ext=+all" "[[OUTPUT2]]"
61+
// CHK-FPGA-LINK-WIN: llvm-spirv{{.*}} "-o" "[[OUTPUT3:.+\.spv]]" "-spirv-max-version=1.1" "-spirv-ext=+all,-SPV_INTEL_usm_storage_classes" "[[OUTPUT2]]"
6262
// CHK-FPGA-LINK-WIN: aoc{{.*}} "-o" "[[OUTPUT5:.+\.aocr]]" "[[OUTPUT3]]" "-sycl" "-rtl"
6363
// CHK-FPGA-LINK-WIN: lib.exe{{.*}} "[[INPUT]]" {{.*}} "-OUT:libfoo.lib"
6464

@@ -112,7 +112,7 @@
112112
// CHK-FPGA: clang-offload-bundler{{.*}} "-type=o" "-targets=host-x86_64-unknown-linux-gnu,sycl-spir64_fpga-unknown-unknown-sycldevice" {{.*}} "-outputs=[[FINALLINK2:.+\.o]],[[OUTPUT1:.+\.o]]" "-unbundle"
113113
// CHK-FPGA: llvm-no-spir-kernel{{.*}} "[[OUTPUT1]]" "-o" "[[OUTPUT3:.+\.o]]"
114114
// CHK-FPGA: llvm-link{{.*}} "[[OUTPUT3]]" "-o" "[[OUTPUT4:.+\.bc]]"
115-
// CHK-FPGA: llvm-spirv{{.*}} "-o" "[[OUTPUT5:.+\.spv]]" "-spirv-max-version=1.1" "-spirv-ext=+all" "[[OUTPUT4]]"
115+
// CHK-FPGA: llvm-spirv{{.*}} "-o" "[[OUTPUT5:.+\.spv]]" "-spirv-max-version=1.1" "-spirv-ext=+all,-SPV_INTEL_usm_storage_classes" "[[OUTPUT4]]"
116116
// CHK-FPGA: clang-offload-wrapper{{.*}} "-o=[[OUTPUT6:.+\.bc]]" "-host=x86_64-unknown-linux-gnu" "-target=spir64_fpga" "-kind=sycl" "[[OUTPUT5]]"
117117
// CHK-FPGA: llc{{.*}} "-filetype=obj" "-o" "[[FINALLINK3:.+\.o]]" "[[OUTPUT6]]"
118118
// CHK-FPGA: clang-offload-bundler{{.*}} "-type=aoo" "-targets=host-x86_64-unknown-linux-gnu" {{.*}} "-outputs=[[FINALLINK4:.+\.txt]]" "-unbundle"

clang/test/Driver/sycl-offload.c

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -639,17 +639,28 @@
639639

640640
/// Ahead of Time compilation for fpga, gen, cpu - tool invocation
641641
// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fsycl-targets=spir64_fpga-unknown-unknown-sycldevice %s -### 2>&1 \
642-
// RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-AOT,CHK-TOOLS-FPGA
642+
// RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-AOT,CHK-TOOLS-FPGA,CHK-TOOLS-FPGA-USM-DISABLE
643643
// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fintelfpga %s -### 2>&1 \
644-
// RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-AOT,CHK-TOOLS-FPGA
644+
// RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-AOT,CHK-TOOLS-FPGA,CHK-TOOLS-FPGA-USM-DISABLE
645+
// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fsycl-targets=spir64_fpga-unknown-unknown-sycldevice -fsycl-enable-usm-address-spaces %s -### 2>&1 \
646+
// RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-AOT,CHK-TOOLS-FPGA,CHK-TOOLS-FPGA-USM-ENABLE
647+
// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fintelfpga -fsycl-enable-usm-address-spaces %s -### 2>&1 \
648+
// RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-AOT,CHK-TOOLS-FPGA,CHK-TOOLS-FPGA-USM-ENABLE
649+
// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fsycl-targets=spir64_gen-unknown-unknown-sycldevice -fsycl-enable-usm-address-spaces %s -### 2>&1 \
650+
// RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-AOT,CHK-TOOLS-GEN
651+
// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fsycl-targets=spir64_x86_64-unknown-unknown-sycldevice -fsycl-enable-usm-address-spaces %s -### 2>&1 \
652+
// RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-AOT,CHK-TOOLS-CPU
645653
// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fsycl-targets=spir64_gen-unknown-unknown-sycldevice %s -### 2>&1 \
646654
// RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-AOT,CHK-TOOLS-GEN
647655
// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fsycl-targets=spir64_x86_64-unknown-unknown-sycldevice %s -### 2>&1 \
648656
// RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-AOT,CHK-TOOLS-CPU
649657
// CHK-TOOLS-AOT: clang{{.*}} "-fsycl-is-device" {{.*}} "-o" "[[OUTPUT1:.+\.bc]]"
650658
// CHK-TOOLS-AOT: llvm-link{{.*}} "[[OUTPUT1]]" "-o" "[[OUTPUT2:.+\.bc]]"
651659
// CHK-TOOLS-AOT: sycl-post-link{{.*}} "-o" "[[OUTPUT2_1:.+\.bc]]" "[[OUTPUT2]]"
652-
// CHK-TOOLS-AOT: llvm-spirv{{.*}} "-o" "[[OUTPUT3:.+\.spv]]" "-spirv-max-version=1.1" "-spirv-ext=+all" "[[OUTPUT2_1]]"
660+
// CHK-TOOLS-CPU: llvm-spirv{{.*}} "-o" "[[OUTPUT3:.+\.spv]]" "-spirv-max-version=1.1" "-spirv-ext=+all,-SPV_INTEL_usm_storage_classes" "[[OUTPUT2_1]]"
661+
// CHK-TOOLS-GEN: llvm-spirv{{.*}} "-o" "[[OUTPUT3:.+\.spv]]" "-spirv-max-version=1.1" "-spirv-ext=+all,-SPV_INTEL_usm_storage_classes" "[[OUTPUT2_1]]"
662+
// CHK-TOOLS-FPGA-USM-DISABLE: llvm-spirv{{.*}} "-o" "[[OUTPUT3:.+\.spv]]" "-spirv-max-version=1.1" "-spirv-ext=+all,-SPV_INTEL_usm_storage_classes" "[[OUTPUT2_1]]"
663+
// CHK-TOOLS-FPGA-USM-ENABLE: llvm-spirv{{.*}} "-o" "[[OUTPUT3:.+\.spv]]" "-spirv-max-version=1.1" "-spirv-ext=+all" "[[OUTPUT2_1]]"
653664
// CHK-TOOLS-FPGA: aoc{{.*}} "-o" "[[OUTPUT4:.+\.aocx]]" "[[OUTPUT3]]"
654665
// CHK-TOOLS-GEN: ocloc{{.*}} "-output" "[[OUTPUT4:.+\.out]]" {{.*}} "[[OUTPUT3]]"
655666
// CHK-TOOLS-CPU: opencl-aot{{.*}} "-o=[[OUTPUT4:.+\.out]]" {{.*}} "[[OUTPUT3]]"

clang/test/Driver/sycl.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,11 @@
4040
// DEFAULT: "-triple" "spir64-unknown-{{.*}}-sycldevice{{.*}}" "-fsycl-is-device"{{.*}} "-emit-llvm-bc"
4141
// DEFAULT: "-internal-isystem" "{{.*}}bin{{[/\\]+}}..{{[/\\]+}}include{{[/\\]+}}sycl"
4242
// DEFAULT: "-internal-isystem" "{{.*lib.*clang.*include}}"
43-
// DEFAULT-NOT: "{{.*}}llvm-spirv"{{.*}} "-spirv-max-version=1.1"{{.*}} "-spirv-ext=+all"
43+
// DEFAULT-NOT: "{{.*}}llvm-spirv"{{.*}} "-spirv-max-version=1.1"{{.*}} "-spirv-ext=+all,-SPV_INTEL_usm_storage_classes"
4444
// DEFAULT-NOT: "-std=c++11"
4545
// DEFAULT-NOT: "-std=c++14"
4646
// NO-BITCODE: "-triple" "spir64-unknown-{{.*}}-sycldevice"{{.*}} "-fsycl-is-device"{{.*}} "-emit-llvm-bc"
47-
// NO-BITCODE: "{{.*}}llvm-spirv"{{.*}} "-spirv-max-version=1.1"{{.*}} "-spirv-ext=+all"
47+
// NO-BITCODE: "{{.*}}llvm-spirv"{{.*}} "-spirv-max-version=1.1"{{.*}} "-spirv-ext=+all,-SPV_INTEL_usm_storage_classes"
4848
// TARGET: "-triple" "spir64-unknown-linux-sycldevice"{{.*}} "-fsycl-is-device"{{.*}} "-emit-llvm-bc"
4949
// COMBINED: "-triple" "spir64-unknown-{{.*}}-sycldevice"{{.*}} "-fsycl-is-device"{{.*}} "-emit-llvm-bc"
5050
// TEXTUAL: "-triple" "spir64-unknown-{{.*}}-sycldevice{{.*}}" "-fsycl-is-device"{{.*}} "-emit-llvm"

llvm/include/llvm/Demangle/ItaniumDemangle.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1199,7 +1199,7 @@ class TemplateArgs final : public Node {
11991199

12001200
template<typename Fn> void match(Fn F) const { F(Params); }
12011201

1202-
NodeArray getParams() { return Params; }
1202+
const NodeArray &getParams() const { return Params; }
12031203

12041204
void printLeft(OutputStream &S) const override {
12051205
S += "<";

sycl/CMakeLists.txt

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
cmake_minimum_required(VERSION 3.2)
1+
cmake_minimum_required(VERSION 3.14)
22

33
project(sycl-solution)
44
# Requirements
@@ -184,6 +184,35 @@ install(DIRECTORY ${OPENCL_INCLUDE}/CL
184184
COMPONENT opencl-headers
185185
)
186186

187+
# vc-intrinsics could have been added earlier from llvm/projects
188+
if (NOT TARGET LLVMGenXIntrinsics)
189+
if (NOT DEFINED LLVMGenXIntrinsics_SOURCE_DIR)
190+
message(STATUS "vc-intrinsics are missing. Will try to download them from github.com")
191+
192+
include(FetchContent)
193+
FetchContent_Declare(vc-intrinsics
194+
GIT_REPOSITORY https://github.com/intel/vc-intrinsics.git
195+
GIT_TAG cce6e48c28eb850d7dadd30841c0d95f009bbca1
196+
)
197+
FetchContent_MakeAvailable(vc-intrinsics)
198+
FetchContent_GetProperties(vc-intrinsics)
199+
200+
set(LLVMGenXIntrinsics_SOURCE_DIR ${vc-intrinsics_SOURCE_DIR})
201+
set(LLVMGenXIntrinsics_BINARY_DIR ${vc-intrinsics_BINARY_DIR})
202+
else()
203+
# -DLLVMGenXIntrinsics_SOURCE_DIR is provided
204+
message(STATUS "vc-intrinsics are added manually ${LLVMGenXIntrinsics_SOURCE_DIR}")
205+
206+
set(LLVMGenXIntrinsics_BINARY_DIR ${CMAKE_BINARY_DIR}/vc-intrinsics-build)
207+
add_subdirectory(${LLVMGenXIntrinsics_SOURCE_DIR} ${LLVMGenXIntrinsics_BINARY_DIR})
208+
endif()
209+
210+
target_include_directories(LLVMGenXIntrinsics
211+
PUBLIC $<BUILD_INTERFACE:${LLVMGenXIntrinsics_SOURCE_DIR}/GenXIntrinsics/include>
212+
PUBLIC $<BUILD_INTERFACE:${LLVMGenXIntrinsics_BINARY_DIR}/GenXIntrinsics/include>
213+
)
214+
endif()
215+
187216
option(SYCL_BUILD_PI_CUDA
188217
"Enables the CUDA backend for the Plugin Interface" OFF)
189218

sycl/doc/CompilerAndRuntimeDesign.md

Lines changed: 101 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -510,14 +510,18 @@ down to the NVPTX Back End. All produced bitcode depends on two libraries,
510510
`libdevice.bc` (provided by the CUDA SDK) and `libspirv-nvptx64--nvidiacl.bc`
511511
(built by the libclc project).
512512

513-
During the device linking step (device linker box in the
514-
[Separate Compilation and Linking](#separate-compilation-and-linking)
515-
illustration), llvm bitcode objects for the CUDA target are linked together
516-
alongside `libspirv-nvptx64--nvidiacl.bc` and `libdevice.bc`, compiled to PTX
517-
using the NVPTX backend, and assembled into a cubin using the `ptxas` tool (part
518-
of the CUDA SDK). The PTX file and cubin are assembled together using
519-
`fatbinary` to produce a CUDA fatbin. The CUDA fatbin is then passed to the
520-
offload wrapper tool.
513+
##### Device code post-link step
514+
515+
During the "PTX target processing" in the device linking step [Device
516+
code post-link step](#device-code-post-link-step), the llvm bitcode
517+
objects for the CUDA target are linked together alongside
518+
`libspirv-nvptx64--nvidiacl.bc` and `libdevice.bc`, compiled to PTX
519+
using the NVPTX backend and assembled into a cubin using the `ptxas`
520+
tool (part of the CUDA SDK). The PTX file and cubin are assembled
521+
together using `fatbinary` to produce a CUDA fatbin. The CUDA fatbin
522+
is then passed to the offload wrapper tool.
523+
524+
![NVPTX AOT build](images/DevicePTXProcessing.svg)
521525

522526
##### Checking if the compiler is targeting NVPTX
523527

@@ -592,9 +596,97 @@ define void @SYCL_generated_kernel(i32 %local_ptr_offset, i32 %arg, i32 %local_p
592596
593597
On the runtime side, when setting local memory arguments, the CUDA PI
594598
implementation will internally set the argument as the offset with respect to
595-
the accumulated size of used local memory. This approach preserves the exisiting
599+
the accumulated size of used local memory. This approach preserves the existing
596600
PI interface.
597601
602+
##### Global offset support
603+
604+
The CUDA API does not natively support the global offset parameter
605+
expected by the SYCL.
606+
607+
In order to emulate this and make generated kernel compliant, an
608+
intrinsic `llvm.nvvm.implicit.offset` (clang builtin
609+
`__builtin_ptx_implicit_offset`) was introduced materializing the use
610+
of this implicit parameter for the NVPTX backend. The intrinsic returns
611+
a pointer to `i32` referring to a 3 elements array.
612+
613+
Each non-kernel function reaching the implicit offset intrinsic in the
614+
call graph is augmented with an extra implicit parameter of type
615+
pointer to `i32`. Kernels calling one of these functions using
616+
this intrinsic are cloned:
617+
618+
- the original kernel initializes an array of 3 `i32` to 0 and passes
619+
the pointer to this array to each function with the implicit
620+
parameter;
621+
- the cloned function type is augmented with an implicit parameter of
622+
type array of 3 `i32`. The pointer to this array is then passed each
623+
function with the implicit parameter.
624+
625+
The runtime will query both kernels and call the appropriate one based
626+
on the following logic:
627+
628+
- If the 2 versions exist, the original kernel is called if global
629+
offset is 0 otherwise it will call the cloned one and pass the
630+
offset by value;
631+
- If only 1 function exist, it is assumed that the kernel makes no use
632+
of this parameter and therefore ignores it.
633+
634+
As an example, the following code:
635+
```
636+
declare i32* @llvm.nvvm.implicit.offset()
637+
638+
define weak_odr dso_local i64 @other_function() {
639+
%1 = tail call i32* @llvm.nvvm.implicit.offset()
640+
%2 = getelementptr inbounds i32, i32* %1, i64 2
641+
%3 = load i32, i32* %2, align 4
642+
%4 = zext i32 %3 to i64
643+
ret i64 %4
644+
}
645+
646+
define weak_odr dso_local void @other_function2() {
647+
ret
648+
}
649+
650+
define weak_odr dso_local void @example_kernel() {
651+
entry:
652+
%0 = call i64 @other_function()
653+
call void @other_function2()
654+
ret void
655+
}
656+
```
657+
658+
Is transformed into this in the `sycldevice` environment:
659+
```
660+
define weak_odr dso_local i64 @other_function(i32* %0) {
661+
%2 = getelementptr inbounds i32, i32* %0, i64 2
662+
%3 = load i32, i32* %2, align 4
663+
%4 = zext i32 %3 to i64
664+
665+
ret i64 %4
666+
}
667+
668+
define weak_odr dso_local void @example_kernel() {
669+
entry:
670+
%0 = alloca [3 x i32], align 4
671+
%1 = bitcast [3 x i32]* %0 to i8*
672+
call void @llvm.memset.p0i8.i64(i8* nonnull align 4 dereferenceable(12) %1, i8 0, i64 12, i1 false)
673+
%2 = getelementptr inbounds [3 x i32], [3 x i32]* %0, i32 0, i32 0
674+
%3 = call i64 @other_function(i32* %2)
675+
call void @other_function2()
676+
ret void
677+
}
678+
679+
define weak_odr dso_local void @example_kernel_with_offset([3 x i32]* byval([3 x i32]) %0) {
680+
entry:
681+
%1 = bitcast [3 x i32]* %0 to i32*
682+
%2 = call i64 @other_function(i32* %1)
683+
call void @other_function2()
684+
ret void
685+
}
686+
```
687+
688+
Note: Kernel naming is not fully stable for now.
689+
598690
### Integration with SPIR-V format
599691
600692
This section explains how to generate SPIR-V specific types and operations from

sycl/doc/GetStartedGuide.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ and a wide range of compute accelerators such as GPU and FPGA.
2222
## Prerequisites
2323

2424
* `git` - [Download](https://git-scm.com/downloads)
25-
* `cmake` version 3.2 or later - [Download](http://www.cmake.org/download/)
25+
* `cmake` version 3.14 or later - [Download](http://www.cmake.org/download/)
2626
* `python` - [Download](https://www.python.org/downloads/release/python-2716/)
2727
* `ninja` -
2828
[Download](https://github.com/ninja-build/ninja/wiki/Pre-built-Ninja-packages)

sycl/doc/extensions/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ DPC++ extensions status:
1313
| [SYCL_INTEL_deduction_guides](deduction_guides/SYCL_INTEL_deduction_guides.asciidoc) | Supported | |
1414
| [SYCL_INTEL_device_specific_kernel_queries](DeviceSpecificKernelQueries/SYCL_INTEL_device_specific_kernel_queries.asciidoc) | Proposal | |
1515
| [SYCL_INTEL_enqueue_barrier](EnqueueBarrier/enqueue_barrier.asciidoc) | Supported(OpenCL, Level Zero) | |
16-
| [SYCL_INTEL_extended_atomics](ExtendedAtomics/SYCL_INTEL_extended_atomics.asciidoc) | Proposal | |
16+
| [SYCL_INTEL_extended_atomics](ExtendedAtomics/SYCL_INTEL_extended_atomics.asciidoc) | Partially supported(OpenCL: CPU, GPU) | Not supported: pointer types |
1717
| [SYCL_INTEL_group_algorithms](GroupAlgorithms/SYCL_INTEL_group_algorithms.asciidoc) | Supported(OpenCL) | |
1818
| [SYCL_INTEL_group_mask](./GroupMask/SYCL_INTEL_group_mask.asciidoc) | Proposal | |
1919
| [FPGA selector](IntelFPGA/FPGASelector.md) | Supported | |

0 commit comments

Comments
 (0)