Skip to content

Commit 98079ae

Browse files
committed
init value, update comment, add back sycl-post-link test
1 parent 87eb7a4 commit 98079ae

File tree

2 files changed

+42
-8
lines changed

2 files changed

+42
-8
lines changed

llvm/lib/SYCLLowerIR/SpecConstants.cpp

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,16 +31,18 @@ using namespace llvm;
3131

3232
static cl::opt<SpecConstantsPass::HandlingMode> SpecConstantMode(
3333
"spec-constant-mode", cl::Optional, cl::Hidden,
34-
cl::desc("Spec constant handling mode"),
34+
cl::desc("Specialization constant handling mode"),
35+
cl::init(SpecConstantsPass::HandlingMode::emulation),
3536
cl::values(
36-
clEnumValN(SpecConstantsPass::HandlingMode::default_values,
37-
"default_values",
38-
"spec constant uses are replaced by default values"),
39-
clEnumValN(SpecConstantsPass::HandlingMode::emulation, "emulation",
40-
"spec constant intrinsics are replaced by RT buffers"),
4137
clEnumValN(
42-
SpecConstantsPass::HandlingMode::native, "native",
43-
"spec constant intrinsics are lowered to spirv intrinsics")));
38+
SpecConstantsPass::HandlingMode::default_values, "default_values",
39+
"Specialization constant uses are replaced by default values"),
40+
clEnumValN(
41+
SpecConstantsPass::HandlingMode::emulation, "emulation",
42+
"Specialization constant intrinsic is replaced by run-time buffer"),
43+
clEnumValN(SpecConstantsPass::HandlingMode::native, "native",
44+
"Specialization constant intrinsic is lowered to SPIR-V "
45+
"intrinsic")));
4446

4547
namespace {
4648

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
; RUN: sycl-post-link -properties -split=auto -spec-const=native -S -o %t.table %s -generate-device-image-default-spec-consts
2+
; RUN: FileCheck %s -input-file %t_1.ll --implicit-check-not="SpecConst"
3+
4+
; This test checks that the post link tool is able to correctly transform
5+
; SYCL alloca intrinsics in SPIR-V devices when using default values.
6+
7+
%"class.sycl::_V1::specialization_id" = type { i64 }
8+
%"class.sycl::_V1::specialization_id.0" = type { i32 }
9+
%"class.sycl::_V1::specialization_id.1" = type { i16 }
10+
%my_range = type { ptr addrspace(4), ptr addrspace(4) }
11+
12+
@size_i64 = internal addrspace(1) constant %"class.sycl::_V1::specialization_id" { i64 10 }, align 8
13+
@size_i32 = internal addrspace(1) constant %"class.sycl::_V1::specialization_id.0" { i32 120 }, align 4
14+
@size_i16 = internal addrspace(1) constant %"class.sycl::_V1::specialization_id.1" { i16 1 }, align 2
15+
16+
@size_i64_stable_name = private unnamed_addr constant [36 x i8] c"_ZTS14name_generatorIL_Z8size_i64EE\00", align 1
17+
@size_i32_stable_name = private unnamed_addr constant [36 x i8] c"_ZTS14name_generatorIL_Z8size_i32EE\00", align 1
18+
@size_i16_stable_name = private unnamed_addr constant [36 x i8] c"_ZTS14name_generatorIL_Z8size_i16EE\00", align 1
19+
20+
define spir_kernel void @private_alloca() {
21+
; CHECK: alloca double, i32 120, align 8
22+
call ptr @llvm.sycl.alloca.p0.p4.p4.p4.f64(ptr addrspace(4) addrspacecast (ptr @size_i32_stable_name to ptr addrspace(4)), ptr addrspace(4) addrspacecast (ptr addrspace(1) @size_i32 to ptr addrspace(4)), ptr addrspace(4) null, double 0.000000e+00, i64 8)
23+
; CHECK: alloca float, i64 10, align 8
24+
call ptr @llvm.sycl.alloca.p0.p4.p4.p4.f32(ptr addrspace(4) addrspacecast (ptr @size_i64_stable_name to ptr addrspace(4)), ptr addrspace(4) addrspacecast (ptr addrspace(1) @size_i64 to ptr addrspace(4)), ptr addrspace(4) null, float 0.000000e+00, i64 8)
25+
; CHECK: alloca %my_range, i16 1, align 64
26+
call ptr @llvm.sycl.alloca.p0.p4.p4.p4.s_my_range(ptr addrspace(4) addrspacecast (ptr @size_i16_stable_name to ptr addrspace(4)), ptr addrspace(4) addrspacecast (ptr addrspace(1) @size_i16 to ptr addrspace(4)), ptr addrspace(4) null, %my_range zeroinitializer, i64 64)
27+
ret void
28+
}
29+
30+
declare ptr @llvm.sycl.alloca.p0.p4.p4.p4.f32(ptr addrspace(4), ptr addrspace(4), ptr addrspace(4), float, i64)
31+
declare ptr @llvm.sycl.alloca.p0.p4.p4.p4.f64(ptr addrspace(4), ptr addrspace(4), ptr addrspace(4), double, i64)
32+
declare ptr @llvm.sycl.alloca.p0.p4.p4.p4.s_my_range(ptr addrspace(4), ptr addrspace(4), ptr addrspace(4), %my_range, i64)

0 commit comments

Comments
 (0)