Skip to content

Commit ab645f1

Browse files
[SPIRV] Avoid OpQuantizeToF16 in SPIR-V kernel test (llvm#158086)
This PR resolves the current failure in the `integer-casts.ll` SPIR-V test during CI runs in `llvm-project`. The failure occurs because the SPIR-V instruction `OpQuantizeToF16` requires the `Capability::Shader`. However, the function in `integer-casts.ll` is written as a kernel function and executed in a kernel environment. Therefore, `Capability::Kernel` is emitted instead of `Capability::Shader`. To fix this, we remove the `QuantizeToF16` test from`integer-casts.ll` in this PR.
1 parent d7421e6 commit ab645f1

File tree

2 files changed

+36
-24
lines changed

2 files changed

+36
-24
lines changed

llvm/test/CodeGen/SPIRV/instructions/integer-casts.ll

Lines changed: 21 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@
1414
; CHECK-DAG: OpName [[ZEXT8_16:%.*]] "u8tou16"
1515
; CHECK-DAG: OpName [[ZEXT16_32:%.*]] "u16tou32"
1616

17+
; CHECK-DAG: OpName %[[#R16:]] "r16"
1718
; CHECK-DAG: OpName %[[#R17:]] "r17"
1819
; CHECK-DAG: OpName %[[#R18:]] "r18"
1920
; CHECK-DAG: OpName %[[#R19:]] "r19"
2021
; CHECK-DAG: OpName %[[#R20:]] "r20"
21-
; CHECK-DAG: OpName %[[#R21:]] "r21"
2222

2323
; CHECK-DAG: OpName [[TRUNC32_16v4:%.*]] "i32toi16v4"
2424
; CHECK-DAG: OpName [[TRUNC32_8v4:%.*]] "i32toi8v4"
@@ -30,11 +30,11 @@
3030
; CHECK-DAG: OpName [[ZEXT8_16v4:%.*]] "u8tou16v4"
3131
; CHECK-DAG: OpName [[ZEXT16_32v4:%.*]] "u16tou32v4"
3232

33-
; CHECK-DAG: OpDecorate %[[#R17]] FPRoundingMode RTZ
34-
; CHECK-DAG: OpDecorate %[[#R18]] FPRoundingMode RTE
35-
; CHECK-DAG: OpDecorate %[[#R19]] FPRoundingMode RTP
36-
; CHECK-DAG: OpDecorate %[[#R20]] FPRoundingMode RTN
37-
; CHECK-DAG: OpDecorate %[[#R21]] SaturatedConversion
33+
; CHECK-DAG: OpDecorate %[[#R16]] FPRoundingMode RTZ
34+
; CHECK-DAG: OpDecorate %[[#R17]] FPRoundingMode RTE
35+
; CHECK-DAG: OpDecorate %[[#R18]] FPRoundingMode RTP
36+
; CHECK-DAG: OpDecorate %[[#R19]] FPRoundingMode RTN
37+
; CHECK-DAG: OpDecorate %[[#R20]] SaturatedConversion
3838

3939
; CHECK-DAG: [[F32:%.*]] = OpTypeFloat 32
4040
; CHECK-DAG: [[F16:%.*]] = OpTypeFloat 16
@@ -258,7 +258,6 @@ define <4 x i32> @u16tou32v4(<4 x i16> %a) {
258258
; CHECK: %[[#]] = OpUConvert [[U32]] %[[#]]
259259
; CHECK: %[[#]] = OpSConvert [[U32]] %[[#]]
260260
; CHECK: %[[#]] = OpFConvert [[F16]] %[[#]]
261-
; CHECK: %[[#]] = OpQuantizeToF16 [[F32]] %[[#]]
262261
; CHECK: %[[#]] = OpSatConvertSToU [[U64]] %[[#]]
263262
; CHECK: %[[#]] = OpSatConvertUToS [[U64]] %[[#]]
264263
; CHECK: %[[#]] = OpConvertPtrToU [[U64]] [[Arg1]]
@@ -267,11 +266,11 @@ define <4 x i32> @u16tou32v4(<4 x i16> %a) {
267266
; CHECK: %[[#]] = OpSConvert [[U32v4]] %[[#]]
268267
; CHECK: %[[#]] = OpConvertUToF [[F32]] %[[#]]
269268
; CHECK: %[[#]] = OpConvertUToF [[F32]] %[[#]]
269+
; CHECK: %[[#R16]] = OpFConvert [[F32v2]] %[[#]]
270270
; CHECK: %[[#R17]] = OpFConvert [[F32v2]] %[[#]]
271271
; CHECK: %[[#R18]] = OpFConvert [[F32v2]] %[[#]]
272272
; CHECK: %[[#R19]] = OpFConvert [[F32v2]] %[[#]]
273-
; CHECK: %[[#R20]] = OpFConvert [[F32v2]] %[[#]]
274-
; CHECK: %[[#R21]] = OpConvertFToU [[U8]] %[[#]]
273+
; CHECK: %[[#R20]] = OpConvertFToU [[U8]] %[[#]]
275274
; CHECK: OpFunctionEnd
276275
define dso_local spir_kernel void @test_wrappers(ptr addrspace(4) %arg, i64 %arg_ptr, <4 x i8> %arg_v2) {
277276
%r1 = call spir_func i32 @__spirv_ConvertFToU(float 0.000000e+00)
@@ -281,20 +280,19 @@ define dso_local spir_kernel void @test_wrappers(ptr addrspace(4) %arg, i64 %arg
281280
%r5 = call spir_func i32 @__spirv_UConvert(i64 1)
282281
%r6 = call spir_func i32 @__spirv_SConvert(i64 1)
283282
%r7 = call spir_func half @__spirv_FConvert(float 0.000000e+00)
284-
%r8 = call spir_func float @__spirv_QuantizeToF16(float 0.000000e+00)
285-
%r9 = call spir_func i64 @__spirv_SatConvertSToU(i64 1)
286-
%r10 = call spir_func i64 @__spirv_SatConvertUToS(i64 1)
287-
%r11 = call spir_func i64 @__spirv_ConvertPtrToU(ptr addrspace(4) %arg)
288-
%r12 = call spir_func ptr addrspace(4) @__spirv_ConvertUToPtr(i64 %arg_ptr)
289-
%r13 = call spir_func <4 x i32> @_Z22__spirv_UConvert_Rint2Dv2_a(<4 x i8> %arg_v2)
290-
%r14 = call spir_func <4 x i32> @_Z22__spirv_SConvert_Rint2Dv2_a(<4 x i8> %arg_v2)
291-
%r15 = call spir_func float @_Z30__spirv_ConvertUToF_Rfloat_rtz(i64 %arg_ptr)
292-
%r16 = call spir_func float @__spirv_ConvertUToF_Rfloat_rtz(i64 %arg_ptr)
293-
%r17 = call spir_func <2 x float> @_Z28__spirv_FConvert_Rfloat2_rtzDv2_DF16_(<2 x half> noundef <half 0xH409A, half 0xH439A>)
294-
%r18 = call spir_func <2 x float> @_Z28__spirv_FConvert_Rfloat2_rteDv2_DF16_(<2 x half> noundef <half 0xH409A, half 0xH439A>)
295-
%r19 = call spir_func <2 x float> @_Z28__spirv_FConvert_Rfloat2_rtpDv2_DF16_(<2 x half> noundef <half 0xH409A, half 0xH439A>)
296-
%r20 = call spir_func <2 x float> @_Z28__spirv_FConvert_Rfloat2_rtnDv2_DF16_(<2 x half> noundef <half 0xH409A, half 0xH439A>)
297-
%r21 = call spir_func i8 @_Z30__spirv_ConvertFToU_Ruchar_satf(float noundef 42.0)
283+
%r8 = call spir_func i64 @__spirv_SatConvertSToU(i64 1)
284+
%r9 = call spir_func i64 @__spirv_SatConvertUToS(i64 1)
285+
%r10 = call spir_func i64 @__spirv_ConvertPtrToU(ptr addrspace(4) %arg)
286+
%r11 = call spir_func ptr addrspace(4) @__spirv_ConvertUToPtr(i64 %arg_ptr)
287+
%r12 = call spir_func <4 x i32> @_Z22__spirv_UConvert_Rint2Dv2_a(<4 x i8> %arg_v2)
288+
%r13 = call spir_func <4 x i32> @_Z22__spirv_SConvert_Rint2Dv2_a(<4 x i8> %arg_v2)
289+
%r14 = call spir_func float @_Z30__spirv_ConvertUToF_Rfloat_rtz(i64 %arg_ptr)
290+
%r15 = call spir_func float @__spirv_ConvertUToF_Rfloat_rtz(i64 %arg_ptr)
291+
%r16 = call spir_func <2 x float> @_Z28__spirv_FConvert_Rfloat2_rtzDv2_DF16_(<2 x half> noundef <half 0xH409A, half 0xH439A>)
292+
%r17 = call spir_func <2 x float> @_Z28__spirv_FConvert_Rfloat2_rteDv2_DF16_(<2 x half> noundef <half 0xH409A, half 0xH439A>)
293+
%r18 = call spir_func <2 x float> @_Z28__spirv_FConvert_Rfloat2_rtpDv2_DF16_(<2 x half> noundef <half 0xH409A, half 0xH439A>)
294+
%r19 = call spir_func <2 x float> @_Z28__spirv_FConvert_Rfloat2_rtnDv2_DF16_(<2 x half> noundef <half 0xH409A, half 0xH439A>)
295+
%r20 = call spir_func i8 @_Z30__spirv_ConvertFToU_Ruchar_satf(float noundef 42.0)
298296
ret void
299297
}
300298

@@ -305,7 +303,6 @@ declare dso_local spir_func float @__spirv_ConvertUToF(i32)
305303
declare dso_local spir_func i32 @__spirv_UConvert(i64)
306304
declare dso_local spir_func i32 @__spirv_SConvert(i64)
307305
declare dso_local spir_func half @__spirv_FConvert(float)
308-
declare dso_local spir_func float @__spirv_QuantizeToF16(float)
309306
declare dso_local spir_func i64 @__spirv_SatConvertSToU(i64)
310307
declare dso_local spir_func i64 @__spirv_SatConvertUToS(i64)
311308
declare dso_local spir_func i64 @__spirv_ConvertPtrToU(ptr addrspace(4))
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv-unknown-vulkan-compute %s -o - | FileCheck %s
2+
; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv-unknown-vulkan-compute %s -o - -filetype=obj | spirv-val %}
3+
4+
; TODO: Implement support for the SPIR-V QuantizeToF16 operation
5+
; XFAIL: *
6+
7+
; CHECK-DAG: [[F32:%.*]] = OpTypeFloat 32
8+
; CHECK: %[[#]] = OpQuantizeToF16 [[F32]] %[[#]]
9+
define spir_func void @test_wrappers() {
10+
entry:
11+
%r8 = call spir_func float @__spirv_QuantizeToF16(float 0.000000e+00)
12+
ret void
13+
}
14+
15+
declare dso_local spir_func float @__spirv_QuantizeToF16(float)

0 commit comments

Comments
 (0)