| ; RUN: llc -O0 -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s | |
| ; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown %s -o - -filetype=obj | spirv-val %} | |
| ; Verify that <1 x T> types are scalarized to T since SPIR-V doesn't support | |
| ; single-element vectors. | |
| ; CHECK-DAG: %[[#INT16:]] = OpTypeInt 16 0 | |
| ; CHECK-DAG: %[[#FLOAT64:]] = OpTypeFloat 64 | |
| ; CHECK-DAG: %[[#VEC4:]] = OpTypeVector %[[#FLOAT64]] 4 | |
| ; CHECK-DAG: %[[#FNTY:]] = OpTypeFunction %[[#VEC4]] %[[#INT16]] | |
| ; CHECK-DAG: %[[#ZERO:]] = OpConstantNull %[[#INT16]] | |
| ; CHECK: OpFunctionCall %[[#VEC4]] %[[#]] %[[#ZERO]] | |
| define spir_func <4 x double> @caller() { | |
| entry: | |
| %C = call <4 x double> @callee(<1 x i16> zeroinitializer) | |
| ret <4 x double> %C | |
| } | |
| declare <4 x double> @callee(<1 x i16>) | |
| ; CHECK: %[[#EXTRACT_RES:]] = OpFunctionParameter %[[#INT16]] | |
| ; CHECK: OpReturnValue %[[#EXTRACT_RES]] | |
| define spir_func i16 @test_extractelement(<1 x i16> %v) { | |
| entry: | |
| %e = extractelement <1 x i16> %v, i32 0 | |
| ret i16 %e | |
| } | |
| ; CHECK: %[[#INSERT_VAL:]] = OpFunctionParameter %[[#INT16]] | |
| ; CHECK: OpReturnValue %[[#INSERT_VAL]] | |
| define spir_func <1 x i16> @test_insertelement(i16 %val) { | |
| entry: | |
| %v = insertelement <1 x i16> poison, i16 %val, i32 0 | |
| ret <1 x i16> %v | |
| } | |
| ; CHECK: %[[#SHUF_PARAM:]] = OpFunctionParameter %[[#INT16]] | |
| ; CHECK: OpReturnValue %[[#SHUF_PARAM]] | |
| define spir_func <1 x i16> @test_shufflevector(<1 x i16> %v) { | |
| entry: | |
| %s = shufflevector <1 x i16> %v, <1 x i16> poison, <1 x i32> zeroinitializer | |
| ret <1 x i16> %s | |
| } | |
| ; CHECK: %[[#LHS_PARAM:]] = OpFunctionParameter %[[#INT16]] | |
| ; CHECK: %[[#RHS_PARAM:]] = OpFunctionParameter %[[#INT16]] | |
| ; CHECK: %[[#RET:]] = OpIAdd %[[#INT16]] %[[#LHS_PARAM]] %[[#RHS_PARAM]] | |
| ; CHECK: OpReturnValue %[[#RET]] | |
| define spir_func <1 x i16> @test_arithm(<1 x i16> %v1, <1 x i16> %v2) { | |
| entry: | |
| %s = add <1 x i16> %v1, %v2 | |
| ret <1 x i16> %s | |
| } |