diff --git a/llvm-spirv/include/LLVMSPIRVExtensions.inc b/llvm-spirv/include/LLVMSPIRVExtensions.inc index 6248f31841585..e1b343078c092 100644 --- a/llvm-spirv/include/LLVMSPIRVExtensions.inc +++ b/llvm-spirv/include/LLVMSPIRVExtensions.inc @@ -55,6 +55,7 @@ EXT(SPV_INTEL_global_variable_decorations) EXT(SPV_INTEL_complex_float_mul_div) EXT(SPV_INTEL_split_barrier) EXT(SPV_INTEL_masked_gather_scatter) -EXT(SPV_INTEL_tensor_float32_conversion) +EXT(SPV_INTEL_tensor_float32_conversion) // TODO: to remove old extension +EXT(SPV_INTEL_tensor_float32_rounding) EXT(SPV_EXT_relaxed_printf_string_address_space) EXT(SPV_INTEL_fpga_argument_interfaces) diff --git a/llvm-spirv/lib/SPIRV/libSPIRV/SPIRVInstruction.h b/llvm-spirv/lib/SPIRV/libSPIRV/SPIRVInstruction.h index d49978b20b84b..dcca5b8dcb9c7 100644 --- a/llvm-spirv/lib/SPIRV/libSPIRV/SPIRVInstruction.h +++ b/llvm-spirv/lib/SPIRV/libSPIRV/SPIRVInstruction.h @@ -3587,10 +3587,10 @@ _SPIRV_OP(MaskedScatter, false, 5) #undef _SPIRV_OP template -class SPIRVTensorFloat32ConversionINTELInstBase : public SPIRVUnaryInst { +class SPIRVTensorFloat32RoundingINTELInstBase : public SPIRVUnaryInst { protected: SPIRVCapVec getRequiredCapability() const override { - return getVec(internal::CapabilityTensorFloat32ConversionINTEL); + return getVec(internal::CapabilityTensorFloat32RoundingINTEL); } std::optional getRequiredExtension() const override { @@ -3611,8 +3611,8 @@ class SPIRVTensorFloat32ConversionINTELInstBase : public SPIRVUnaryInst { // because it may call a method of class Module that may modify LiteralMap // of Module field. That modification is not impacting validate method for // these instructions, so const_cast is safe here. - using SPVTF32ConvTy = SPIRVTensorFloat32ConversionINTELInstBase; - SPIRVValue *Input = const_cast(this)->getOperand(0); + using SPVTF32RoundTy = SPIRVTensorFloat32RoundingINTELInstBase; + SPIRVValue *Input = const_cast(this)->getOperand(0); SPIRVType *InCompTy = Input->getType(); SPIRVWord InCompCount = 1; @@ -3640,8 +3640,8 @@ class SPIRVTensorFloat32ConversionINTELInstBase : public SPIRVUnaryInst { }; #define _SPIRV_OP(x) \ - typedef SPIRVTensorFloat32ConversionINTELInstBase SPIRV##x; -_SPIRV_OP(ConvertFToTF32INTEL) + typedef SPIRVTensorFloat32RoundingINTELInstBase SPIRV##x; +_SPIRV_OP(RoundFToTF32INTEL) #undef _SPIRV_OP } // namespace SPIRV diff --git a/llvm-spirv/lib/SPIRV/libSPIRV/SPIRVNameMapEnum.h b/llvm-spirv/lib/SPIRV/libSPIRV/SPIRVNameMapEnum.h index 790be97223420..146f4709e8aa6 100644 --- a/llvm-spirv/lib/SPIRV/libSPIRV/SPIRVNameMapEnum.h +++ b/llvm-spirv/lib/SPIRV/libSPIRV/SPIRVNameMapEnum.h @@ -646,8 +646,8 @@ template <> inline void SPIRVMap::init() { "GlobalVariableDecorationsINTEL"); add(internal::CapabilityComplexFloatMulDivINTEL, "ComplexFloatMulDivINTEL"); add(internal::CapabilityMaskedGatherScatterINTEL, "MaskedGatherScatterINTEL"); - add(internal::CapabilityTensorFloat32ConversionINTEL, - "TensorFloat32ConversionINTEL"); + add(internal::CapabilityTensorFloat32RoundingINTEL, + "TensorFloat32RoundingINTEL"); add(internal::CapabilityJointMatrixWIInstructionsINTEL, "JointMatrixWIInstructionsINTEL"); add(internal::CapabilityJointMatrixTF32ComponentTypeINTEL, diff --git a/llvm-spirv/lib/SPIRV/libSPIRV/SPIRVOpCodeEnumInternal.h b/llvm-spirv/lib/SPIRV/libSPIRV/SPIRVOpCodeEnumInternal.h index b0e74791a0a83..b4d4b58d63a06 100644 --- a/llvm-spirv/lib/SPIRV/libSPIRV/SPIRVOpCodeEnumInternal.h +++ b/llvm-spirv/lib/SPIRV/libSPIRV/SPIRVOpCodeEnumInternal.h @@ -20,4 +20,4 @@ _SPIRV_OP_INTERNAL(ComplexFMulINTEL, internal::ComplexFMulINTEL) _SPIRV_OP_INTERNAL(ComplexFDivINTEL, internal::ComplexFDivINTEL) _SPIRV_OP_INTERNAL(MaskedGatherINTEL, internal::OpMaskedGatherINTEL) _SPIRV_OP_INTERNAL(MaskedScatterINTEL, internal::OpMaskedScatterINTEL) -_SPIRV_OP_INTERNAL(ConvertFToTF32INTEL, internal::ConvertFToTF32INTEL) +_SPIRV_OP_INTERNAL(RoundFToTF32INTEL, internal::RoundFToTF32INTEL) diff --git a/llvm-spirv/lib/SPIRV/libSPIRV/spirv_internal.hpp b/llvm-spirv/lib/SPIRV/libSPIRV/spirv_internal.hpp index 26a36165ed2bd..5cb1e485e7972 100644 --- a/llvm-spirv/lib/SPIRV/libSPIRV/spirv_internal.hpp +++ b/llvm-spirv/lib/SPIRV/libSPIRV/spirv_internal.hpp @@ -72,7 +72,7 @@ enum InternalOp { IOpJointMatrixWorkItemLengthINTEL = 6410, IOpComplexFMulINTEL = 6415, IOpComplexFDivINTEL = 6416, - IOpConvertFToTF32INTEL = 6426, + IOpRoundFToTF32INTEL = 6426, IOpMaskedGatherINTEL = 6428, IOpMaskedScatterINTEL = 6429, IOpJointMatrixGetElementCoordINTEL = 6440, @@ -101,6 +101,7 @@ enum InternalCapability { ICapFPArithmeticFenceINTEL = 6144, ICapGlobalVariableDecorationsINTEL = 6146, ICapabilityComplexFloatMulDivINTEL = 6414, + ICapabilityTensorFloat32RoundingINTEL = 6425, ICapabilityTensorFloat32ConversionINTEL = 6425, ICapabilityMaskedGatherScatterINTEL = 6427, ICapabilityJointMatrixWIInstructionsINTEL = 6435, @@ -170,8 +171,8 @@ _SPIRV_OP(Capability, MaskedGatherScatterINTEL) _SPIRV_OP(Op, MaskedGatherINTEL) _SPIRV_OP(Op, MaskedScatterINTEL) -_SPIRV_OP(Capability, TensorFloat32ConversionINTEL) -_SPIRV_OP(Op, ConvertFToTF32INTEL) +_SPIRV_OP(Capability, TensorFloat32RoundingINTEL) +_SPIRV_OP(Op, RoundFToTF32INTEL) #undef _SPIRV_OP constexpr SourceLanguage SourceLanguagePython = diff --git a/llvm-spirv/test/extensions/INTEL/SPV_INTEL_joint_matrix/joint_matrix_tf32.ll b/llvm-spirv/test/extensions/INTEL/SPV_INTEL_joint_matrix/joint_matrix_tf32.ll index 04fea81b1b58f..5dbb67fb8cfbf 100644 --- a/llvm-spirv/test/extensions/INTEL/SPV_INTEL_joint_matrix/joint_matrix_tf32.ll +++ b/llvm-spirv/test/extensions/INTEL/SPV_INTEL_joint_matrix/joint_matrix_tf32.ll @@ -7,7 +7,7 @@ ; RUN: llvm-spirv -r %t.spv -o %t.rev.bc ; RUN: llvm-dis -opaque-pointers=0 < %t.rev.bc | FileCheck %s --check-prefix=CHECK-LLVM -; CHECK-SPIRV-DAG: Capability TensorFloat32ConversionINTEL +; CHECK-SPIRV-DAG: Capability TensorFloat32RoundingINTEL ; CHECK-SPIRV-DAG: Capability JointMatrixINTEL ; CHECK-SPIRV-DAG: Capability JointMatrixTF32ComponentTypeINTEL ; CHECK-SPIRV-DAG: Extension "SPV_INTEL_tensor_float32_conversion" @@ -110,7 +110,7 @@ for.cond30.i: ; preds = %for.body37.i, %for. for.body37.i: ; preds = %for.cond30.i %call.i218.i = tail call spir_func noundef float @_Z28__spirv_VectorExtractDynamicIfN4sycl3_V13ext6oneapi12experimental6matrix9precision4tf32ELm8ELm16ELN5__spv9MatrixUseE0ELNS8_12MatrixLayoutE0ELNS8_5Scope4FlagE3EET_PNS8_24__spirv_JointMatrixINTELIT0_XT1_EXT2_EXT4_EXT5_EXT3_EEEm(%spirv.JointMatrixINTEL._tf32_8_16_0_3_0 addrspace(4)* noundef %sub_a.sroa.0.1.i, i64 noundef %conv31.i) #3 - %call.i.i = tail call spir_func noundef float @_Z27__spirv_ConvertFToTF32INTELf(float noundef %call.i218.i) #3 + %call.i.i = tail call spir_func noundef float @_Z25__spirv_RoundFToTF32INTELf(float noundef %call.i218.i) #3 %call.i225.i = tail call spir_func noundef %spirv.JointMatrixINTEL._tf32_8_16_0_3_0 addrspace(4)* @_Z27__spirv_VectorInsertDynamicIfN4sycl3_V13ext6oneapi12experimental6matrix9precision4tf32ELm8ELm16ELN5__spv9MatrixUseE0ELNS8_12MatrixLayoutE0ELNS8_5Scope4FlagE3EEPNS8_24__spirv_JointMatrixINTELIT0_XT1_EXT2_EXT4_EXT5_EXT3_EEESG_T_m(%spirv.JointMatrixINTEL._tf32_8_16_0_3_0 addrspace(4)* noundef %sub_a.sroa.0.1.i, float noundef %call.i.i, i64 noundef %conv31.i) #3 %inc.i = add nuw nsw i32 %i.0.i, 1 br label %for.cond30.i @@ -130,7 +130,7 @@ for.cond.cleanup58.i: ; preds = %for.cond52.i for.body59.i: ; preds = %for.cond52.i %call.i236.i = tail call spir_func noundef float @_Z28__spirv_VectorExtractDynamicIfN4sycl3_V13ext6oneapi12experimental6matrix9precision4tf32ELm16ELm16ELN5__spv9MatrixUseE1ELNS8_12MatrixLayoutE0ELNS8_5Scope4FlagE3EET_PNS8_24__spirv_JointMatrixINTELIT0_XT1_EXT2_EXT4_EXT5_EXT3_EEEm(%spirv.JointMatrixINTEL._tf32_16_16_0_3_1 addrspace(4)* noundef %sub_b.sroa.0.0.i, i64 noundef %conv53.i) #3 - %call.i171.i = tail call spir_func noundef float @_Z27__spirv_ConvertFToTF32INTELf(float noundef %call.i236.i) #3 + %call.i171.i = tail call spir_func noundef float @_Z25__spirv_RoundFToTF32INTELf(float noundef %call.i236.i) #3 %call.i243.i = tail call spir_func noundef %spirv.JointMatrixINTEL._tf32_16_16_0_3_1 addrspace(4)* @_Z27__spirv_VectorInsertDynamicIfN4sycl3_V13ext6oneapi12experimental6matrix9precision4tf32ELm16ELm16ELN5__spv9MatrixUseE1ELNS8_12MatrixLayoutE0ELNS8_5Scope4FlagE3EEPNS8_24__spirv_JointMatrixINTELIT0_XT1_EXT2_EXT4_EXT5_EXT3_EEESG_T_m(%spirv.JointMatrixINTEL._tf32_16_16_0_3_1 addrspace(4)* noundef %sub_b.sroa.0.0.i, float noundef %call.i171.i, i64 noundef %conv53.i) #3 %inc74.i = add nuw nsw i32 %i51.0.i, 1 br label %for.cond52.i @@ -173,7 +173,7 @@ declare dso_local spir_func noundef %spirv.JointMatrixINTEL._tf32_16_16_0_3_1 ad declare dso_local spir_func noundef i64 @_Z38__spirv_JointMatrixWorkItemLengthINTELIN4sycl3_V13ext6oneapi12experimental6matrix9precision4tf32ELm8ELm16ELN5__spv9MatrixUseE0ELNS8_12MatrixLayoutE0ELNS8_5Scope4FlagE3EEmPNS8_24__spirv_JointMatrixINTELIT_XT0_EXT1_EXT3_EXT4_EXT2_EEE(%spirv.JointMatrixINTEL._tf32_8_16_0_3_0 addrspace(4)* noundef) local_unnamed_addr #2 ; Function Attrs: convergent -declare dso_local spir_func noundef float @_Z27__spirv_ConvertFToTF32INTELf(float noundef) local_unnamed_addr #2 +declare dso_local spir_func noundef float @_Z25__spirv_RoundFToTF32INTELf(float noundef) local_unnamed_addr #2 ; Function Attrs: convergent declare dso_local spir_func noundef float @_Z28__spirv_VectorExtractDynamicIfN4sycl3_V13ext6oneapi12experimental6matrix9precision4tf32ELm8ELm16ELN5__spv9MatrixUseE0ELNS8_12MatrixLayoutE0ELNS8_5Scope4FlagE3EET_PNS8_24__spirv_JointMatrixINTELIT0_XT1_EXT2_EXT4_EXT5_EXT3_EEEm(%spirv.JointMatrixINTEL._tf32_8_16_0_3_0 addrspace(4)* noundef, i64 noundef) local_unnamed_addr #2 diff --git a/llvm-spirv/test/extensions/INTEL/SPV_INTEL_tensor_float32_conversion/convert_tensor_float32.ll b/llvm-spirv/test/extensions/INTEL/SPV_INTEL_tensor_float32_conversion/convert_tensor_float32.ll index 1f0270694178f..140df66247227 100644 --- a/llvm-spirv/test/extensions/INTEL/SPV_INTEL_tensor_float32_conversion/convert_tensor_float32.ll +++ b/llvm-spirv/test/extensions/INTEL/SPV_INTEL_tensor_float32_conversion/convert_tensor_float32.ll @@ -13,7 +13,7 @@ target datalayout = "e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-n8:16:32:64" target triple = "spir64-unknown-unknown" -; CHECK-SPIRV: Capability TensorFloat32ConversionINTEL +; CHECK-SPIRV: Capability TensorFloat32RoundingINTEL ; CHECK-SPIRV: Extension "SPV_INTEL_tensor_float32_conversion" ; CHECK-SPIRV: TypeFloat [[#FP32Ty:]] 32 ; CHECK-SPIRV: TypeVector [[#FP32v8Ty:]] [[#FP32Ty]] 8 @@ -22,24 +22,24 @@ target triple = "spir64-unknown-unknown" ; CHECK-SPIRV: FunctionParameter [[#FP32Ty]] [[FP32ValId:.*]] ; CHECK-SPIRV: FunctionParameter [[#FP32v8Ty]] [[FP32v8ValId:.*]] -; CHECK-SPIRV: ConvertFToTF32INTEL [[#FP32Ty]] [[#]] [[FP32ValId]] -; CHECK-SPIRV: ConvertFToTF32INTEL [[#FP32v8Ty]] [[#]] [[FP32v8ValId]] -; CHECK-SPIRV: ConvertFToTF32INTEL [[#FP32Ty]] [[#]] [[#CONST]] +; CHECK-SPIRV: RoundFToTF32INTEL [[#FP32Ty]] [[#]] [[FP32ValId]] +; CHECK-SPIRV: RoundFToTF32INTEL [[#FP32v8Ty]] [[#]] [[FP32v8ValId]] +; CHECK-SPIRV: RoundFToTF32INTEL [[#FP32Ty]] [[#]] [[#CONST]] -; CHECK-LLVM: call spir_func float @_Z27__spirv_ConvertFToTF32INTELf(float -; CHECK-LLVM: call spir_func <8 x float> @_Z27__spirv_ConvertFToTF32INTELDv8_f(<8 x float> -; CHECK-LLVM: call spir_func float @_Z27__spirv_ConvertFToTF32INTELf(float 1.000000e+00) +; CHECK-LLVM: call spir_func float @_Z25__spirv_RoundFToTF32INTELf(float +; CHECK-LLVM: call spir_func <8 x float> @_Z25__spirv_RoundFToTF32INTELDv8_f(<8 x float> +; CHECK-LLVM: call spir_func float @_Z25__spirv_RoundFToTF32INTELf(float 1.000000e+00) define spir_func void @_Z2opffv8(float %a, <8 x float> %in) { - %1 = tail call spir_func float @_Z27__spirv_ConvertFToTF32INTELf(float %a) - %2 = tail call spir_func <8 x float> @_Z27__spirv_ConvertFToTF32INTELDv8_f(<8 x float> %in) - %3 = tail call spir_func float @_Z27__spirv_ConvertFToTF32INTELf(float 1.000000e+00) + %1 = tail call spir_func float @_Z25__spirv_RoundFToTF32INTELf(float %a) + %2 = tail call spir_func <8 x float> @_Z25__spirv_RoundFToTF32INTELDv8_f(<8 x float> %in) + %3 = tail call spir_func float @_Z25__spirv_RoundFToTF32INTELf(float 1.000000e+00) ret void } -declare spir_func float @_Z27__spirv_ConvertFToTF32INTELf(float) +declare spir_func float @_Z25__spirv_RoundFToTF32INTELf(float) -declare spir_func <8 x float> @_Z27__spirv_ConvertFToTF32INTELDv8_f(<8 x float>) +declare spir_func <8 x float> @_Z25__spirv_RoundFToTF32INTELDv8_f(<8 x float>) !opencl.spir.version = !{!0} !spirv.Source = !{!1}