xref: /llvm-project/llvm/test/CodeGen/SPIRV/transcoding/spec_const.ll (revision dfb9bf35c42a04a8f152dabf0a9d1a52e451f942)
1*dfb9bf35SVyacheslav Levytskyy; RUN: llc -O0 -mtriple=spirv32-unknown-unknown --avoid-spirv-capabilities=Shader %s -o - | FileCheck %s --check-prefix=CHECK-SPIRV
2*dfb9bf35SVyacheslav Levytskyy; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv32-unknown-unknown --avoid-spirv-capabilities=Shader %s -o - -filetype=obj | spirv-val %}
313453c98SAndrey Tretyakov
4*dfb9bf35SVyacheslav Levytskyy; CHECK-SPIRV-DAG: OpCapability Kernel
513453c98SAndrey Tretyakov; CHECK-SPIRV-NOT: OpCapability Matrix
613453c98SAndrey Tretyakov; CHECK-SPIRV-NOT: OpCapability Shader
713453c98SAndrey Tretyakov
813453c98SAndrey Tretyakov; CHECK-SPIRV-DAG: OpDecorate %[[#SC0:]] SpecId 0
913453c98SAndrey Tretyakov; CHECK-SPIRV-DAG: OpDecorate %[[#SC1:]] SpecId 1
1013453c98SAndrey Tretyakov; CHECK-SPIRV-DAG: OpDecorate %[[#SC2:]] SpecId 2
1113453c98SAndrey Tretyakov; CHECK-SPIRV-DAG: OpDecorate %[[#SC3:]] SpecId 3
1213453c98SAndrey Tretyakov; CHECK-SPIRV-DAG: OpDecorate %[[#SC4:]] SpecId 4
1313453c98SAndrey Tretyakov; CHECK-SPIRV-DAG: OpDecorate %[[#SC5:]] SpecId 5
1413453c98SAndrey Tretyakov; CHECK-SPIRV-DAG: OpDecorate %[[#SC6:]] SpecId 6
1513453c98SAndrey Tretyakov; CHECK-SPIRV-DAG: OpDecorate %[[#SC7:]] SpecId 7
1613453c98SAndrey Tretyakov
1713453c98SAndrey Tretyakov; CHECK-SPIRV-DAG: %[[#SC0]] = OpSpecConstantFalse %[[#]]
1813453c98SAndrey Tretyakov; CHECK-SPIRV-DAG: %[[#SC1]] = OpSpecConstant %[[#]] 100
1913453c98SAndrey Tretyakov; CHECK-SPIRV-DAG: %[[#SC2]] = OpSpecConstant %[[#]] 1
2013453c98SAndrey Tretyakov; CHECK-SPIRV-DAG: %[[#SC3]] = OpSpecConstant %[[#]] 2
2113453c98SAndrey Tretyakov; CHECK-SPIRV-DAG: %[[#SC4]] = OpSpecConstant %[[#]] 3 0
2213453c98SAndrey Tretyakov; CHECK-SPIRV-DAG: %[[#SC5]] = OpSpecConstant %[[#]] 14336
2313453c98SAndrey Tretyakov; CHECK-SPIRV-DAG: %[[#SC6]] = OpSpecConstant %[[#]] 1067450368
2413453c98SAndrey Tretyakov; CHECK-SPIRV-DAG: %[[#SC7]] = OpSpecConstant %[[#]] 0 1073807360
2513453c98SAndrey Tretyakov
2613453c98SAndrey Tretyakovdefine spir_kernel void @foo(i8 addrspace(1)* nocapture %b, i8 addrspace(1)* nocapture %c, i16 addrspace(1)* nocapture %s, i32 addrspace(1)* nocapture %i, i64 addrspace(1)* nocapture %l, half addrspace(1)* nocapture %h, float addrspace(1)* nocapture %f, double addrspace(1)* nocapture %d) local_unnamed_addr {
2713453c98SAndrey Tretyakoventry:
2813453c98SAndrey Tretyakov  %0 = call i1 @_Z20__spirv_SpecConstantib(i32 0, i1 false)
2913453c98SAndrey Tretyakov  %conv = zext i1 %0 to i8
3013453c98SAndrey Tretyakov  store i8 %conv, i8 addrspace(1)* %b, align 1
3113453c98SAndrey Tretyakov
3213453c98SAndrey Tretyakov  %1 = call i8 @_Z20__spirv_SpecConstantia(i32 1, i8 100)
3313453c98SAndrey Tretyakov  store i8 %1, i8 addrspace(1)* %c, align 1
3413453c98SAndrey Tretyakov
3513453c98SAndrey Tretyakov  %2 = call i16 @_Z20__spirv_SpecConstantis(i32 2, i16 1)
3613453c98SAndrey Tretyakov  store i16 %2, i16 addrspace(1)* %s, align 2
3713453c98SAndrey Tretyakov
3813453c98SAndrey Tretyakov  %3 = call i32 @_Z20__spirv_SpecConstantii(i32 3, i32 2)
3913453c98SAndrey Tretyakov  store i32 %3, i32 addrspace(1)* %i, align 4
4013453c98SAndrey Tretyakov
4113453c98SAndrey Tretyakov  %4 = call i64 @_Z20__spirv_SpecConstantix(i32 4, i64 3)
4213453c98SAndrey Tretyakov  store i64 %4, i64 addrspace(1)* %l, align 8
4313453c98SAndrey Tretyakov
4413453c98SAndrey Tretyakov  %5 = call half @_Z20__spirv_SpecConstantih(i32 5, half 0xH3800)
4513453c98SAndrey Tretyakov  store half %5, half addrspace(1)* %h, align 2
4613453c98SAndrey Tretyakov
4713453c98SAndrey Tretyakov  %6 = call float @_Z20__spirv_SpecConstantif(i32 6, float 1.250000e+00)
4813453c98SAndrey Tretyakov  store float %6, float addrspace(1)* %f, align 4
4913453c98SAndrey Tretyakov
5013453c98SAndrey Tretyakov  %7 = call double @_Z20__spirv_SpecConstantid(i32 7, double 2.125000e+00)
5113453c98SAndrey Tretyakov  store double %7, double addrspace(1)* %d, align 8
5213453c98SAndrey Tretyakov  ret void
5313453c98SAndrey Tretyakov}
5413453c98SAndrey Tretyakov
5513453c98SAndrey Tretyakovdeclare i1 @_Z20__spirv_SpecConstantib(i32, i1)
5613453c98SAndrey Tretyakovdeclare i8 @_Z20__spirv_SpecConstantia(i32, i8)
5713453c98SAndrey Tretyakovdeclare i16 @_Z20__spirv_SpecConstantis(i32, i16)
5813453c98SAndrey Tretyakovdeclare i32 @_Z20__spirv_SpecConstantii(i32, i32)
5913453c98SAndrey Tretyakovdeclare i64 @_Z20__spirv_SpecConstantix(i32, i64)
6013453c98SAndrey Tretyakovdeclare half @_Z20__spirv_SpecConstantih(i32, half)
6113453c98SAndrey Tretyakovdeclare float @_Z20__spirv_SpecConstantif(i32, float)
6213453c98SAndrey Tretyakovdeclare double @_Z20__spirv_SpecConstantid(i32, double)
63