Skip to content

Commit 637cde4

Browse files
committed
Merge remote-tracking branch 'remote/sycl' into simd-attr-sampler
2 parents f33dee6 + 2eed402 commit 637cde4

File tree

10 files changed

+287
-18
lines changed

10 files changed

+287
-18
lines changed
Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,21 @@
11
// Check LLVM optimization pipeline is run by default for SPIR-V compiled for
22
// SYCL device target, and can be disabled with -fno-sycl-early-optimizations.
33
//
4-
// RUN: %clang_cc1 -O2 -fsycl-is-device -triple spir64-unknown-unknown %s -mllvm -debug-pass=Structure -emit-llvm -o - 2>&1 | FileCheck %s --check-prefix=CHECK-EARLYOPT
4+
// RUN: %clang_cc1 -O2 -fsycl-is-device -triple spir64-unknown-unknown %s -flegacy-pass-manager -mllvm -debug-pass=Structure -emit-llvm -o /dev/null 2>&1 | FileCheck %s --check-prefix=CHECK-EARLYOPT
55
// CHECK-EARLYOPT: Lower Work Group Scope Code
66
// CHECK-EARLYOPT: Combine redundant instructions
77
//
8-
// RUN: %clang_cc1 -O2 -fsycl-is-device -fno-sycl-early-optimizations -triple spir64-unknown-unknown %s -mllvm -debug-pass=Structure -emit-llvm -o - 2>&1 | FileCheck %s --check-prefix=CHECK-NOEARLYOPT
8+
// RUN: %clang_cc1 -O2 -fsycl-is-device -triple spir64-unknown-unknown %s -flegacy-pass-manager -mllvm -debug-pass=Structure -emit-llvm -fno-sycl-early-optimizations -o /dev/null 2>&1 | FileCheck %s --check-prefix=CHECK-NOEARLYOPT
99
// CHECK-NOEARLYOPT: Lower Work Group Scope Code
1010
// CHECK-NOEARLYOPT-NOT: Combine redundant instructions
11+
//
12+
//
13+
// New pass manager doesn't print all passes tree, only module level.
14+
//
15+
// RUN: %clang_cc1 -O2 -fsycl-is-device -triple spir64-unknown-unknown %s -fno-legacy-pass-manager -mdebug-pass Structure -emit-llvm -o /dev/null 2>&1 | FileCheck %s --check-prefix=CHECK-NEWPM-EARLYOPT
16+
// CHECK-NEWPM-EARLYOPT: ConstantMergePass
17+
// CHECK-NEWPM-EARLYOPT: SYCLMutatePrintfAddrspacePass
18+
//
19+
// RUN: %clang_cc1 -O2 -fsycl-is-device -triple spir64-unknown-unknown %s -fno-legacy-pass-manager -mdebug-pass Structure -emit-llvm -fno-sycl-early-optimizations -o /dev/null 2>&1 | FileCheck %s --check-prefix=CHECK-NEWPM-NOEARLYOPT
20+
// CHECK-NEWPM-NOEARLYOPT-NOT: ConstantMergePass
21+
// CHECK-NEWPM-NOEARLYOPT: SYCLMutatePrintfAddrspacePass

libclc/ptx-nvidiacl/libspirv/SOURCES

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ atomic/atomic_dec.cl
9595
atomic/atomic_inc.cl
9696
atomic/atomic_max.cl
9797
atomic/atomic_min.cl
98+
atomic/atomic_sub.cl
9899
atomic/atomic_xchg.cl
99100
atomic/atomic_or.cl
100101
atomic/atomic_xor.cl

libclc/ptx-nvidiacl/libspirv/atomic/atomic_inc_dec_helpers.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
volatile ADDR_SPACE TYPE *pointer, enum Scope scope, \
2424
enum MemorySemanticsMask semantics) { \
2525
return _Z21__spirv_AtomicIAddEXTPU3##ADDR_SPACE_MANGLED##TYPE_MANGLED##N5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE##TYPE_MANGLED( \
26-
pointer, scope, semantics, 1); \
26+
pointer, scope, semantics, VAL); \
2727
}
2828

2929
#define __CLC_NVVM_ATOMIC_INCDEC(TYPE, TYPE_MANGLED, OP_MANGLED, VAL) \

libclc/ptx-nvidiacl/libspirv/atomic/atomic_max.cl

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,60 @@ __CLC_NVVM_ATOMIC(unsigned long, m, unsigned long, ul, max,
2020
#undef __CLC_NVVM_ATOMIC_TYPES
2121
#undef __CLC_NVVM_ATOMIC
2222
#undef __CLC_NVVM_ATOMIC_IMPL
23+
24+
#define __CLC_NVVM_ATOMIC_MAX_IMPL(TYPE, TYPE_MANGLED, TYPE_INT, \
25+
TYPE_INT_MANGLED, OP_MANGLED, ADDR_SPACE, \
26+
ADDR_SPACE_MANGLED) \
27+
TYPE_INT \
28+
_Z18__spirv_AtomicLoadPU3##ADDR_SPACE_MANGLED##K##TYPE_INT_MANGLED##N5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE( \
29+
volatile ADDR_SPACE const TYPE_INT *, enum Scope, \
30+
enum MemorySemanticsMask); \
31+
TYPE_INT \
32+
_Z29__spirv_AtomicCompareExchange##PU3##ADDR_SPACE_MANGLED##TYPE_INT_MANGLED##N5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagES5_##TYPE_INT_MANGLED##TYPE_INT_MANGLED( \
33+
volatile ADDR_SPACE TYPE_INT *, enum Scope, enum MemorySemanticsMask, \
34+
enum MemorySemanticsMask, TYPE_INT, TYPE_INT); \
35+
_CLC_DECL TYPE \
36+
_Z21__spirv_Atomic##OP_MANGLED##PU3##ADDR_SPACE_MANGLED##TYPE_MANGLED##N5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE##TYPE_MANGLED( \
37+
volatile ADDR_SPACE TYPE *pointer, enum Scope scope, \
38+
enum MemorySemanticsMask semantics, TYPE val) { \
39+
enum MemorySemanticsMask load_order; \
40+
switch (semantics) { \
41+
case SequentiallyConsistent: \
42+
load_order = SequentiallyConsistent; \
43+
break; \
44+
case Acquire: \
45+
case AcquireRelease: \
46+
load_order = Acquire; \
47+
break; \
48+
default: \
49+
load_order = None; \
50+
} \
51+
volatile ADDR_SPACE TYPE_INT *pointer_int = \
52+
(volatile ADDR_SPACE TYPE_INT *)pointer; \
53+
TYPE_INT val_int = *(TYPE_INT *)&val; \
54+
TYPE_INT old_int = \
55+
_Z18__spirv_AtomicLoadPU3##ADDR_SPACE_MANGLED##K##TYPE_INT_MANGLED##N5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE( \
56+
pointer_int, scope, load_order); \
57+
TYPE old = *(TYPE *)&old_int; \
58+
while (val > old) { \
59+
TYPE_INT tmp_int = \
60+
_Z29__spirv_AtomicCompareExchange##PU3##ADDR_SPACE_MANGLED##TYPE_INT_MANGLED##N5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagES5_##TYPE_INT_MANGLED##TYPE_INT_MANGLED( \
61+
pointer_int, scope, semantics, semantics, val_int, old_int); \
62+
if (old_int == tmp_int) { \
63+
return *(TYPE *)&tmp_int; \
64+
} \
65+
old_int = tmp_int; \
66+
old = *(TYPE *)&old_int; \
67+
} \
68+
return old; \
69+
}
70+
71+
#define __CLC_NVVM_ATOMIC_MAX(TYPE, TYPE_MANGLED, TYPE_INT, TYPE_INT_MANGLED, \
72+
OP_MANGLED) \
73+
__CLC_NVVM_ATOMIC_MAX_IMPL(TYPE, TYPE_MANGLED, TYPE_INT, TYPE_INT_MANGLED, \
74+
OP_MANGLED, __global, AS1) \
75+
__CLC_NVVM_ATOMIC_MAX_IMPL(TYPE, TYPE_MANGLED, TYPE_INT, TYPE_INT_MANGLED, \
76+
OP_MANGLED, __local, AS3)
77+
78+
__CLC_NVVM_ATOMIC_MAX(float, f, int, i, FMaxEXT)
79+
__CLC_NVVM_ATOMIC_MAX(double, d, long, l, FMaxEXT)

0 commit comments

Comments
 (0)