|
| 1 | +; RUN: opt -passes=spec-constants -spec-constant-mode=default_values %s -S -o - | FileCheck %s |
| 2 | + |
| 3 | +; This test checks that SpecConstantsPass is able to correctly transform |
| 4 | +; SYCL alloca intrinsics in SPIR-V devices when using default values. |
| 5 | + |
| 6 | +%"class.sycl::_V1::specialization_id" = type { i64 } |
| 7 | +%"class.sycl::_V1::specialization_id.0" = type { i32 } |
| 8 | +%"class.sycl::_V1::specialization_id.1" = type { i16 } |
| 9 | +%my_range = type { ptr addrspace(4), ptr addrspace(4) } |
| 10 | + |
| 11 | +@size_i64 = internal addrspace(1) constant %"class.sycl::_V1::specialization_id" { i64 10 }, align 8 |
| 12 | +@size_i32 = internal addrspace(1) constant %"class.sycl::_V1::specialization_id.0" { i32 120 }, align 4 |
| 13 | +@size_i16 = internal addrspace(1) constant %"class.sycl::_V1::specialization_id.1" { i16 1 }, align 2 |
| 14 | + |
| 15 | +@size_i64_stable_name = private unnamed_addr constant [36 x i8] c"_ZTS14name_generatorIL_Z8size_i64EE\00", align 1 |
| 16 | +@size_i32_stable_name = private unnamed_addr constant [36 x i8] c"_ZTS14name_generatorIL_Z8size_i32EE\00", align 1 |
| 17 | +@size_i16_stable_name = private unnamed_addr constant [36 x i8] c"_ZTS14name_generatorIL_Z8size_i16EE\00", align 1 |
| 18 | + |
| 19 | +define spir_kernel void @private_alloca() { |
| 20 | +; CHECK: alloca double, i32 120, align 8 |
| 21 | + 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) |
| 22 | +; CHECK-NEXT: alloca float, i64 10, align 8 |
| 23 | + 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) |
| 24 | +; CHECK-NEXT: alloca %my_range, i16 1, align 64 |
| 25 | + 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) |
| 26 | + ret void |
| 27 | +} |
| 28 | + |
| 29 | +declare ptr @llvm.sycl.alloca.p0.p4.p4.p4.f32(ptr addrspace(4), ptr addrspace(4), ptr addrspace(4), float, i64) |
| 30 | +declare ptr @llvm.sycl.alloca.p0.p4.p4.p4.f64(ptr addrspace(4), ptr addrspace(4), ptr addrspace(4), double, i64) |
| 31 | +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